Android开发中修改任意一个活动的UI

主要思路:

利用Application作为中间变量的容器,利用Handler作为管道进行传参

具体方法:

  1. 在需要被修改的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("今天没有课哦~");  //这个是我要执行的操作
            }
        }
    }
}
  1. 自定义一个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;
    }
}
  1. 在要被修改的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("今天没有课哦~");  //这个是我要执行的操作
            }
        }
    }
}
  1. 在发起修改的地方发送消息
    这里分为两种情况,一种是在自定义组件的类中,一种是在新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的用法,详情见这篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值