在使用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()方法就能更新数据,一定要对存储数据的链表更新不然数据时不会变化的



Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐