java - 带 UI 的 Android 库

标签 java android xml user-interface libraries

我目前已经开发了一个带有一些 GUI 和网络操作的应用程序,但我需要让它更像一个没有 GUI 的库。

我知道在 Properties/Android 下有一个“is library”选项。但问题是:如何将 GUI 元素从项目中移出到不同的应用程序中,以便库/项目只有 java 代码;有什么建议吗?

谢谢。

最佳答案

如果您正在将代码制作成一个库,您希望尽可能地尝试将它与其他任何东西分离。这使得它更加便携,以便更多的人可以按照自己的意愿使用图书馆。即使您现在只是为自己使用这个库,以后您可能希望将它发布给其他人。

比如你目前的代码可能是这样的:

public void computeSum(int a, int b) {
    int sum = a + b;
    mTextView.setText(String.valueOf(sum));
}

现在这段代码与 mTextView 紧密结合。相反,像这样重写代码是有意义的:

//In library
public int computeSum(int a, int b) {
    return a+b;
}

//Somewhere in your app
mTextView.setText(String.valueOf(computeSum(3,4)));

这是一个很小的变化,但是你可以看到 computeSum() 不再与 mTextView 耦合。这使得在整个项目甚至其他项目中使用它变得更加容易。现在 computeSum() 方法是 API 的一部分。

因此,对于您的网络调用,请尝试通过使用回调或返回值将它们与您的 GUI 内容分离。

关于您的最新评论:

您可以像这样创建一个包装器:

public class UIWrapper {
    public Runnable runnable;
    public SomeUiCallback callback;
}

然后在您的 AsyncTask 中使用它:

public class YourTask extends AsyncTask<UIWrapper, Void, Void> {
    SomeUiCallback mCallback;
     protected void doInBackground(UIWrapper... wrapper) {
         mCallback = UiWrapper.callback;
         UIWrapper.runnable.run();
     }

     protected void onProgressUpdate() {
     }

     protected void onPostExecute() {
        mCallback.runYourUiStuff();
     }
 }

我快速编写了该代码,因此它可能无法编译,但希望您能理解。我认为这样的事情会起作用,不确定它是否是最优雅的解决方案。您可以将 Runnable 替换为您想要在线程中运行的任何内容。

因此 UIWrapper 和 YourTask 都将驻留在您的库中。您将创建 UIWrapper,然后在 YourTask 中使用它。

关于java - 带 UI 的 Android 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965105/

相关文章:

java - 运行 simpleSSL 客户端时为 "java.net.SocketException: Connection reset"

android - 如何在 ImageView 中设置大图像

java - 在 Xamarin 中创建 Android 服务并从 Java native 客户端应用程序调用其方法

xml - 通过 VBA 和剪贴板将 HTML 复制到 Word 会丢失特殊字符

python - 使用SAX解析xml后返回一个对象

android - TextView 超链接不起作用?

java - 修改可选<Person>(如果存在)

java - 在 Android 上使用蓝牙的服务发现失败异常

java - Color.RGBToHSV 类型不匹配 : cannot convert from void to float[]

android - 以编程方式添加 EditText 缺失样式