[Android初级]关于Adapter使用notifyDataSetChanged无效的原因和解决方案

  在android中经常会使用Listview等组件来实现对动态数据的更新操作,使用Adaoter适配器来配置和更新数据是必不可少的,最近在写这个功能的时候,在使用adapter的notifyDataSetChanged方法不能要求更新,然而重新new 一个新的适配器实例和数据源对象,重新setAdapter才能实现更新效果,显然这样做有些不合理,适配器本身是有更新数据的功能的。现在主要的问题就是,怎么调用notifyDataSetChanged这个方法才有效?

  问题出现的原因好像是Adapter中的源数据和 在 我们自定义的参数值 不是同一个对象,即数据源的实例在内存中的引用不是一个地址。

  我先写个思路来解决这个问题。

 

/**
 * 注:这不是demo!只是一个思路。
 * @author jan
 */
public class AdaperTest extends Activity {
	//需要展示的数据表
	private ListView mListView;
	//存放源数据的列表对象
	private List<String> originData = new ArrayList<String>();
	//自定义的适配器,这里我不去实现了
	private BaseAdapter mAdapter = new BaseAdapter() {
		
		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			return null;
		}
		
		@Override
		public long getItemId(int arg0) {
			return 0;
		}
		
		@Override
		public Object getItem(int arg0) {
			return null;
		}
		
		@Override
		public int getCount() {
			return 0;
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mListView = (ListView)findViewById(R.id.listview);
		mListView.setAdapter(mAdapter);
		//这个是动态数据,此处我直接new了一个对象,并为赋值。
		List<String>  dynamiData = new ArrayList<String>();
		//先创建一个临时的数据对象
		List<String> temporaryData = new ArrayList<String>();
		for(int i=0;i<dynamiData.size();i++){
			/**
			 * 这里是你对temporaryData进行赋值
			 * temporaryData.add()等数据操作来保存动态数据
			 */
		}
		originData.clear();//先clear掉上次的数据内容
		originData.addAll(temporaryData);//把本次的临时数据全部导入这个源数据集合中去
		mAdapter.notifyDataSetChanged();//这时调用是会更新数据的
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值