Android(安卓)Handle用法
16lz
2021-01-26
最近在做安卓项目时,遇到一个问题,在工作线程中不能更新UI,否则会报错。可以使用Handle来实现在工作线程中更新UI。
Handler简单的使用方法
(1)先声明一个Handler对象,并初始化;
// 声明Handler对象,并初始化private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: // TODO 更新UI textView.setText("Hello, World!"); //textView是一个TextView的对象,通过 TextView textView= (TextView) findViewById(R.id.text);获取。 text是该TextView的id break; } } };
(2)在工作线程中调用handler来更新UI;
// handler的调用方法——该方法是在工作线程中被调用的public void showMessage(String message) { handler.sendEmptyMessage(0); // handler根据传递的参数来对应更新UI }
Handler传递参数更新UI
(1)先声明一个Handler对象,并初始化;
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: // TODO 更新UI Bundle bundle = msg.getData(); String mess = bundle.getString("MESS"); textView.setText(mess); //textView是一个TextView的对象,通过 TextView textView= (TextView) findViewById(R.id.text);来获取。 text是该TextView的id break; case 1: List list = (List)msg.obj; showData(list); // 调用普通的方法 break; case 2: Map map = (Map)msg.obj; showData(map); // 调用普通的方法 break; } } };
(2)在工作线程中调用handler来更新UI,在调用的时候通过传参方式传递数据;
/* * (1)传递简单的字符串 */public void showStringMessage(String message) { Message mess = handler.obtainMessage(); // 先获得Message的对象 mess.what = 0; Bundle bundle = new Bundle(); bundle.putString("MESS", message); mess.setData(bundle); handler.sendMessage(mess); }/* * (2)传递对象——Map跟List均可以这样传递 * 传递List */public void showObjectMessage(List<T> list) { Message mg = handler.obtainMessage(); mg.what = 1; mg.obj = list; handler.sendMessage(mg); }/* * 传递Map */public void showObjectMessage(Map<T, T> map) { Message mg = handler.obtainMessage(); mg.what = 2; mg.obj = map; handler.sendMessage(mg); }
更多相关文章
- Android十八章:Realm-in-android
- surfaceflinger中的显示内存管理类--GraphicBuffer
- Android(java)学习笔记38:Android(安卓)短信发送
- Flutter 和 Android(安卓)互相传递数据的实现
- 使用application类,实现共享对象实例,实现service与activity交互,ui
- android经典面试题集锦
- 从setContentView说起
- Android(安卓)scrollview嵌套listview出现listview无法滑动冲突
- LayoutInflater使用