最近在做安卓项目时,遇到一个问题,在工作线程中不能更新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);    }

更多相关文章

  1. Android十八章:Realm-in-android
  2. surfaceflinger中的显示内存管理类--GraphicBuffer
  3. Android(java)学习笔记38:Android(安卓)短信发送
  4. Flutter 和 Android(安卓)互相传递数据的实现
  5. 使用application类,实现共享对象实例,实现service与activity交互,ui
  6. android经典面试题集锦
  7. 从setContentView说起
  8. Android(安卓)scrollview嵌套listview出现listview无法滑动冲突
  9. LayoutInflater使用

随机推荐

  1. Android(安卓)Activity 之 startActivity
  2. Android重温
  3. 腾讯Android面经
  4. Android中对同一个TextView设置不同字体
  5. 用 Golang 开发 Android 应用(六)—— Came
  6. 【10.0.1】ArcGIS Runtime for Android之
  7. android用户界面之Widget教程实例汇总
  8. android 局域网聊天工具(可发送文字/语音
  9. Android 内核简单分析
  10. 在mac 上配置AndroidStudio碰到的坑