我有一个MainActivity,它将(注册/登录/播放)信息(通过另一个classA)发送到我的服务器。
另一个ClassA得到答案并将它们发送到classB,我实现了register()/ login()/ play()函数。
我的问题是来自classB的这些函数必须在MainActivity中调用另一个方法(比如打开PopUp或更改布局)。我现在搜索了5个小时,其他关于stackover的例子没有帮助。
至少我找到了一个类似的解决方案:
classB{
MainActivity mA;
...
mA= (WelcomeActivity) this.getCurrentActivity();
getCurrentActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mA.method();
}
});
...
}
这是正确的还是我能找到更好的解决方案?
答案 0 :(得分:0)
这是一个普遍的问题,基本上你可以使用接口并使mainActivity实现它们。这叫做委托。
如果您有活动和许多片段可以在所有这些模式之间进行通信,那么您可以使用此模式。
了解一般的android和SOLID委托。
答案 1 :(得分:0)
不存储对活动的引用以从其他非Android类调用。您将最终得到意大利面条代码,违反封装和内存泄漏。
您需要提供有关应用程序结构的模式代码以及" B类"与您的活动有关,但根据您的初始帖子提出的一个建议是在" B"主活动将其自身设置为响应播放操作的类。
public class MainActivity extends Activity {
// Somewhere in onCreate
ClassB b = new ClassB();
b.setOnPlayListener(new OnPlayListener() {
@Override
public void onPlay() {
// Respond to onPlay in this Activity
}
}
}
public class B {
public void play() {
// Do stuff for playing
mOnPlayListener.onPlay(); // Invoke callback to notify play is happening - this will be the activity
}
public void setOnPlayListener(OnPlayListener listener) {
mOnPlayListener = listener;
}
}