我目前已经开发了一些应用程序,其中包含一些GUI和网络操作,但是我需要在没有GUI的情况下将其更多地变成一个库。带有UI的Android库
我知道在Properties/Android下有一个“is library”选项。但问题是:如何将项目中的GUI元素移出到不同的应用程序,以便库/项目只有Java代码;任何建议?
谢谢。
我目前已经开发了一些应用程序,其中包含一些GUI和网络操作,但是我需要在没有GUI的情况下将其更多地变成一个库。带有UI的Android库
我知道在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中使用它。
现在更有意义,但它是GUI部分(“mTextView.setText(String。的valueOf(computeSum(3,4))); “)仍然在库代码或单独的应用程序中导入图书馆? – androidnoob
@ user2808163对不起,我将编辑该代码在您的应用程序库之外。 –
真棒,谢谢。代表upvote的答案:) – androidnoob
听起来像你只是需要解耦两者。将库变成GUI调用的API –
@ trevor-e因此,通常,库不包含GUI元素,只是一堆java代码。那么GUI应用程序只是通过简单的意图导入和调用库? (我对Android有点新鲜) – androidnoob
它更简单。您可以导入该库,然后像使用代码那样使用这些类。除非该库与GUI相关,否则它将不包含GUI代码,否则它会使其不易重用。您应该使用该库来帮助填充您的GUI。我可以更具体地为你输入这个答案。 –