从类

时间:2017-12-03 19:57:12

标签: java android

我有一个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();
        }
    });
...
}  

这是正确的还是我能找到更好的解决方案?

2 个答案:

答案 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;
    }
}