android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用

有时候我们需要修改列表里的数据,并实时刷新,我们除了在在外部调用adapter.notifyDataSetChanged()方法来通知activity刷新, 如果在adapter内部有涉及到更新数据,删除或者增加数据,就可以直接在adapter内部调用notifyDataSetChanged()这个方法,前提是该listview绑定的数据有改变。

以下例子结合Handler,线程展示

public class MyAdapter extends BaseAdapter { private final static String tag = "MyAdapter"; private List alarms; private static final int MODIFY_FAIL = 13; private static final int MODIFY_SUCCESS = 12; private static final int DELETE_SUCCESS= 10; private static final int STUDY_SUCCESS = 11; private Context context; private LayoutInflater inflater; private TextView tvDeviceName; int msgType; private Alarm alarm; private Dialog confirmDlg; // BaseHandler baseHandler; public MyAdapter(Context context, List alarms) { // TODO Auto-generated constructor stub this.context = context; this.alarms = alarms; inflater = LayoutInflater.from(context); } ....... @Override public View getView(int position, View convertView, ViewGroup parent) { alarm = alarms.get(position); if (convertView == null) { convertView = inflater.inflate(R.layout.alarm_manage_item, parent, false); } tvDeviceName = (TextView) convertView.findViewById(R.id.tv_device_name); tvDeviceName.setText(alarm.getName()); ....... return convertView; }

由于代码太多,中间部分省略了

以下是Handler部分,通过Handler,Thread,Message可进行异步操作 ,记住,在Handler的CallBack()方法内不能对UI进行操作,但是可以发送一个空消息到消息队列

contextHandler.sendEmptyMessage(MODIFY_FAIL);

,这样

handleMessage()方法就能够处理消息队列中的消息了,在这个方法里面可对UI进行操作,

要在BaseAdapter内进行通知刷新,关键在于一句 .this.notifyDataSetChanged();

private BaseHandler contextHandler = new BaseHandler(context) {

@Override public void callBack(String recvHex) { // TODO Auto-generated method stub super.callBack(recvHex); recvHex = recvHex.toUpperCase().trim(); String[] strs = recvHex.split(" "); msgType = OutPutProtocol.analysisOutPutOperInfo(recvHex); // 修改名称应答 if (DeviseSettingProtocol.modifyDeviceNameMsg(recvHex) == Resp.Rst_Success) { if(strs[3].equals("00")) { SettingThread thread = new SettingThread( contextHandler,// 返回结果handler context, SettingThread.OperType_EditAlarm, alarm); thread.start(); ProgressDialog.dismissProgressDialog(); } else if(strs[3].equals("02")||strs[3].equals("FF")) { contextHandler.sendEmptyMessage(MODIFY_FAIL);//将一个空消息送到消息队列 } } } @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { //修改名称失败 case MODIFY_FAIL: { Toast.makeText(context, "修改失败", Toast.LENGTH_SHORT).show(); } case Resp.Rst_Fail: { Toast.makeText(context, "删除失败", Toast.LENGTH_SHORT).show(); } case SettingThread.OperType_DelAlarm: { MyAdapter.this.notifyDataSetChanged(); Toast.makeText(context, "删除成功!", Toast.LENGTH_SHORT).show(); } case SettingThread.OperType_EditAlarm: { MyAdapter.this.notifyDataSetChanged(); Toast.makeText(context, "修改成功!", Toast.LENGTH_SHORT).show(); } default: break; } } };

// 通过线程删除数据库中的数据 SettingThread thread = new SettingThread( contextHandler,// 返回结果handler context, SettingThread.OperType_DelAlarm, alarm); thread.start();

线程机制,将Handler和一个标识符

SettingThread.OperType_DelAlarm

传到线程里,在该线程执行耗时操作,并将操作用Msg送到消息队列,然后返回给UI线程,这时UIActivity的Handler就可以取出消息队列中的消息(对应的标识符),然后就可以对UI进行操作了,这就是异步操作

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:Android scrollview 上滑固定某一控件(美团团购详情UI)完美版
下一篇:Android滑动页面导航效果: PagerSlidingTabStrip
相关文章

Android线程模型(Painless Threadin

android线程控制UI更新(Handler 、p

Android中利用画图类和线程画出闪烁的

Android线程优先级设置方法

Android多线程之控制animation走走停停

android单线程,多线程下载

Android线程实例讲解

Android 多线程下载

android线程使用注意问题?【安卓进化

Android中关于线程使用的几点注意事项

图文推荐
android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用
Android中数据存储方
android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用
Android OTA升级包制
android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用
Android从普通发送和
android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用
Android开发:Parall

分类:默认分类 时间:2012-01-04 人气:40
本文关键词:
分享到:

相关文章

  • Android滑动页面导航效果: PagerSlidingTabStrip 2013-03-03

    把github上的PagerSlidingTabStrip稍作修改: tab的文字颜色选中变色(原版文字不变色) 栗子:http://download.csdn.net/detail/onlyonecoder/7722021 PagerSlidingTabStrip 自定义属性列表: pstsIndicatorColor Color of the sliding indicator pstsUnderlineColor Color of the full-width line on the bo

  • Android 系统启动不起原因查找 2013-12-05

    我们遇到Android系统开机界面(bootanimation)后,系统没法运行起来的问题, 系统一直出现 waiting for ...日志 似乎在等什么服务启动 因此怀疑system server 被block了 调试方法如下: 1. adb shell mkdir /data/anr/ 2. adb shell ps | grep system_server system 1138 234 908376 39440 ffffffff 40061a54 S system_server 3.

  • Android 客户端与服务端JSP相互传递中文 2014-11-23

    为了兼容简体、繁体及其他语系,推荐使用UTF-8编码。 首选,我们看看Android端应该怎么做: 在发送前,应该对参数值要进行UTF-8编码,我写了一个static的 转换函数,在做发送动作前用它将参数值转换成utf8编码: public class NetUtil { static public String toUtf8Url(String value) { try { return java.net.URLEncoder.encode(value, "utf8"); } catch (U

  • Android记录15--关于ListView中adapter调用notifyDataSetChanged无效的原因 2012-05-20

    Android记录15--关于ListView中adapter调用notifyDataSetChanged无效的原因 2014年1月16日 开发记录 话说这个问题已经困扰我很久了,一直找不到原因,我以为只要数据变了,调用adapter的notifyDataSetChanged就会更新列表,最近在做微博帐号管理这一块,想着动态更新列表,数据是变了,但就是没有把更新的数据显示出来。为什么是这样,以下是我总结的一些原因: 1、数据源没有更新,调用notifyDataSetChanged无效。 2、数据

  • android ListView之BaseAdapter的使用方式 2013-05-28

    通常在使用自定义适配器的时候,我们都会掌握一种固定的模式。充分利用convertView+缓存的方式。 private ArrayList list ; private LayoutInflater mInflater; public DetailListAdapter(Context context,ArrayList list){ this.list=list; mInflater = LayoutInflater.from(context); } @Override public int

  • Android控件之ListView 2012-04-22

    ListView是Android中最常用的控件之一. ListView中一个重要的概念就是适配器(Adapter),它是控件与数据源之间的桥梁. 常见的数据源有数组/集合(Array/List),游标(Cursor). 1, 从数组中获取数据: 运行结果: 2, 从Cursor中获取数据: [html] // Get a cursor with all people Cursor c = getContentResolver().query(People.CONTENT_URI, null, n

  • Android 实现用户列表信息滑动删除功能和选择删除功能 2012-04-27

    在项目开发过程中,常常需要对用户列表的信息进行删除的操作。Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式。本来的实例集成上述的两种操作方式来实现用户列表删除的效果。 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

  • Android添加书签(二) 2012-06-25

    运行结果: Bookmarker.java: Java代码 package com.iaiai; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.ContentResolver; import android.content.ContentValues; import android.content.DialogInterf

  • android分页查询垃圾短信数据库信息 2012-06-29

    1、数据库 package com.example.yqqmobilesafe.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class RubishSmsDbHelper extends SQLiteOpenHelper { private static Strin

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.104 (s). 10 q(s)