在使用ListView时 经常会遇到更新listview中的数据 并显示出来 再此介绍两个方法来解决这个问题:
1、在对listView进行适配的时候 使用simpleAdapter()的方法适配
adapter = new SimpleAdapter(context, data, resource, from, to);要知道各个参数的含义 context是上下文 即存放listview的上下文,data是一个list
例如:写一个方法 来获得返回对象 simpleadapter
// private SimpleAdapter getAdapter(){
// ArrayList
// 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
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()方法就能更新数据,一定要对存储数据的链表更新不然数据时不会变化的