主要思路:
利用Application作为中间变量的容器,利用Handler作为管道进行传参
具体方法:
- 在需要被修改的activity中写入一个子类
public class MainActivity extends AppCompatActivity {
/*...前面的代码省略...*/
public final class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) { // 更新课表的UI
otherText.setText("今天没有课哦~"); //这个是我要执行的操作
}
}
}
}
- 自定义一个Application并在这个Application中新建一个Handler属性
public class MyApplication extends Application {
private MainActivity.MyHandler handler = null;
public MainActivity.MyHandler getHandler() {
return handler;
}
public void setHandler(MainActivity.MyHandler handler) {
this.handler = handler;
}
}
- 在要被修改的activity获取到Application的引用
myApplication
,并new一个MyHandler名为handler
,然后在myApplication中设置全局的handler
此时要被修改的activity的代码为
public class MainActivity extends AppCompatActivity {
/*...前面的代码省略...*/
@Override
protected void onCreate(Bundle savedInstanceState) {
myApplication = (MyApplication) getApplication();
handler = new MyHandler();
myApplication.setHandler(handler); // 将本activity的handler传给公共区域管理
}
public final class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) { // 更新课表的UI
otherText.setText("今天没有课哦~"); //这个是我要执行的操作
}
}
}
}
- 在发起修改的地方发送消息
这里分为两种情况,一种是在自定义组件的类中,一种是在新activity中。其实都一样,只要是能获取到application的地方就可以搞定。
首先内部属性先写入:
private MyApplication myApplication;
private MainActivity.MyHandler myHandler;
如果是自定义组件:
在对应的构造函数中写入
myApplication = (MyApplication) context;
myHandler = myApplication.getHandler();
在需要调用修改第一步中的activity的UI的地方写
myHandler.sendEmptyMessage(0);
如果是activity:
myApplication = (MyApplication) getApplication()
myHandler = myApplication.getHandler();
然后一样是在需要调用修改第一步中的activity的UI的地方写
myHandler.sendEmptyMessage(0);
关于Message的用法,详情见这篇博客