关于调用adapter.notifydatasetchanged()没有效果的问题

最近在使用ListView的时候,发现调用其Adapter的notifydatasetchanged()并没有刷新数据,代码如下:
首先是初始化ListView:
list = dbHelper.getalluser();
		if (list.size() == 0) {
			Toast.makeText(MainActivity.this, "没有查询到任何数据", Toast.LENGTH_LONG)
					.show();
			getActionBar().setTitle("没有查询到数据");
		}
		adapter = new SimpleAdapter(MainActivity.this, list, R.layout.listitem,
				new String[] { FeedReaderContract._ID,
						FeedReaderContract.COLUMN_NAME_NAME,
						FeedReaderContract.COLUMN_NAME_MOBILE,
						FeedReaderContract.COLUMN_NAME_ADDRESS }, new int[] {
						R.id.id, R.id.name, R.id.telephone, R.id.address });
		listView.setAdapter(adapter);
然后当改变了数据库的数据,重新读取以刷新ListView的数据的时候,代码如下:
list = dbHelper.getalluser();
				if (list.size() == 0) {
					Toast.makeText(MainActivity.this, "没有查询到任何数据",
							Toast.LENGTH_LONG).show();
					getActionBar().setTitle("没有查询到数据");
				} else {
					getActionBar().setTitle("读取成功!");
				}
				adapter.notifyDataSetChanged();
发现ListView并没有刷新,这是为什么呢?
这是因为调用list = dbHelper.getalluser();的时候,list的指向已经改了,指向了一个新的list。既然list的指向已经改变,而调用notifyDataSetChanged会去检查原来list指向的数据是否变化,但是这时的list已经不是原来的list了,所以它无法判断,只能不作出响应了。所以修改代码如下所示:
ArrayList<HashMap<String, Object>> list1 = dbHelper.getalluser();
				if (list1.size() == 0) {
					Toast.makeText(MainActivity.this, "没有查询到任何数据",
							Toast.LENGTH_LONG).show();
					getActionBar().setTitle("没有查询到数据");
				} else {
					getActionBar().setTitle("读取成功!");
				}
				list.clear();
				list.addAll(list1);
				adapter.notifyDataSetChanged();
这样,list的指向就不会改变,它还是指向原来那块内存,这样调用notifyDataSetChanged()就可以起作用了。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值