Android开发中ListView数据更新显示的解决方法

在使用ListView时 经常会遇到更新listview中的数据 并显示出来 再此介绍两个方法来解决这个问题:

1、在对listView进行适配的时候 使用simpleAdapter()的方法适配

     adapter = new SimpleAdapter(context, data, resource, from, to);要知道各个参数的含义 context是上下文 即存放listview的上下文,data是一个list<HashMaop<String,?>>类型的链表结构数据,resource是在layout设置listview中的每一个item的布局文件,from to 设置数据的对应关系的,from 是new String[]{ } 其中的数据时 HashMap<String,?>中的key  , to  --- new int[]{ }是对应的resource中的item布局的控件id 这两个存在对应关系,

例如:写一个方法 来获得返回对象 simpleadapter

// private SimpleAdapter getAdapter(){
// ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
// list = databaseService.getNumberinfos();
//
// SimpleAdapter adapter = new SimpleAdapter(CallSMSActivity.this, list,
// R.layout.item_listview, new String[]{DBInfo.TABLE.ID,DBInfo.TABLE.NUMBER}, new int[]{R.id.number_id,R.id.number_number});
// return adapter;
//
// }


图片中显示的表就是对应代码的listview  这个时从数据库中读取电话号码 右上角的imagebutton点击添加 添加后要更新显示

在adapter提供的方法有 notifyDataSetChanged()这个方法 但是在使用SimpleAdapter 和 ArrayAdapter的时候 这个方法无效

 我们可以 将 adapter = getAdapter(); listview.setAdapter(adapter);这两行代码放在数据变化时来执行 就可以更新数据显示了

另外:我们可以 在 activity中开启一个Handler  在数据变化时向handler发送信息 提示更新 handler.setEmptyMessage(what);

在handler.handMessage()中处理adapter = getAdapter(); listview.setAdapter(adapter);这两行代码

2、新写一个类 ListAdapter(名字随便) extends BaseAdapter{   } 重写BaseAdapter中的方法 

例如:private class ListAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
HashMap<String, Object> map = new HashMap<String, Object>();
map = list.get(position);
View view = View.inflate(CallSMSActivity.this, R.layout.item_listview, null);
TextView number_id = (TextView) view.findViewById(R.id.number_id);
TextView number_number = (TextView) view.findViewById(R.id.number_number);
number_id.setText(map.get(DBInfo.TABLE.ID).toString().trim());
number_number.setText(map.get(DBInfo.TABLE.NUMBER).toString().trim());
return view;
}
}


当数据发生更新时 只需在数据更新出 重新获取list的数据 然后调用adapter.notifyDataSetChanged()方法就能更新数据,一定要对存储数据的链表更新不然数据时不会变化的



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 开发ListView 是常用的列表控件,而 Adapter 则是 ListView 显示列表数据的适配器。当数据源改变时,我们需要调用 Adapter 的 notifyDataSetChanged() 方法来通知 ListView 更新数据。不过有时候,我们会发现调用 notifyDataSetChanged() 方法后,ListView 并没有更新数据,这通常是由以下几个原因造成的: 1. 数据源没有更新 在调用 notifyDataSetChanged() 方法之前,需要先确保数据源已经更新了。如果数据源没有更新,调用 notifyDataSetChanged() 方法也不会更新 ListView 显示数据。 2. Adapter 对象没有重新设置 如果使用的是同一个 Adapter 对象,那么需要重新设置 Adapter 对象才能更新 ListView 显示数据。可以通过 setAdapter() 方法重新设置 Adapter 对象。 3. ListView 没有重新绘制 当调用 notifyDataSetChanged() 方法后,ListView 并不会立即重新绘制,而是等到系统认为需要重新绘制时才会更新。可以通过调用 invalidate() 方法ListView 立即重新绘制。 4. 数据源和 Adapter 对象不匹配 如果数据源和 Adapter 对象不匹配,即数据数据类型和 Adapter 数据类型不一致,调用 notifyDataSetChanged() 方法也无法更新 ListView 显示数据。 综上所述,如果在 ListView 调用 notifyDataSetChanged() 方法无效,可以先检查数据源是否更新,是否重新设置 Adapter 对象,是否调用了 invalidate() 方法以及数据源和 Adapter 对象是否匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值