4

I currently have developed an app with some GUI and network operations, but I need to make it more of a library without the GUI.

I know that there is a "is library" option under Properties/Android. But the question is: how to move the GUI elements out of the project to a different app, so that the library/project will have only java code; any suggestion ?

Thanks.

4

1 回答 1

1

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

例如,您的代码目前可能是这样的:

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 中使用它。

于 2013-09-23T18:56:50.027 回答