从非活动类中调用MainActivity类中的方法

时间:2020-06-30 07:15:01

标签: java android

我在调用MainActivity非活动类中的MSG0100类中调用方法更新时遇到麻烦

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

public void update(boolean msg100Preselection){
    if(msg100Preselection){
        mExpandableListViewAdapter.setSelectedChild(-1);
        mExpandableListViewAdapter.notifyDataSetChanged();
    }
}
}

这是我的班级,我想调用Mainactivity的更新方法。

public class MSG0100{
   boolean msg100Preselection=false;
 pulic void onUpdate(){
     msg100Preselection=true; 
     // Want to call my update method here
     MainActivity activity= new MainActivity();
     activity.update(msg100Preselection); //<-------- Using mainactiviy object crashes my app.
 }
}

3 个答案:

答案 0 :(得分:1)

您想要的东西是不可能的,因为您没有指向主要活动的指针。

以下语句无效。

  MainActivity activity= new MainActivity();

不允许使用new运算符创建活动。这应该使用意图来完成。

答案 1 :(得分:0)

您可以执行以下几项操作:

  1. 在另一个类中移动更新方法

OR

  1. 将您的更新方法声明为static并像这样使用它:

    MainActivity.update(msg100Preselection);

答案 2 :(得分:0)

尝试使用callbackListener:- 在您的MSG0100课堂中

    public class MSG0100 {
        boolean msg100Preselection = false;
        private static OnUpdateListener mListener;

        public static setListener(OnUpdateListener mListener) {
            this.mListener = mListener;
        }

        public void onUpdate() {
            msg100Preselection = true;
            if (mListener != null)
                mListener.onUpdate(msg100Preselection);
        }

        public interface OnUpdateListener()

        {
            void onUpdate ( boolean msg100Preselection);
        }
    }

在您的MainActivity中-

public class MainActivity extends AppCompatActivity, OnUpdateListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MSG0100.setListener(this)
    }

    @Override
    public void onUpdate(boolean msg100Preselection) {
        if (msg100Preselection) {
            mExpandableListViewAdapter.setSelectedChild(-1);
            mExpandableListViewAdapter.notifyDataSetChanged();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        MSG0100.setListener(null)
    }
}

这样,您就不会因为Activity被杀死而导致任何内存泄漏或崩溃。

相关问题