[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();//这时调用是会更新数据的
	}
}



你可能感兴趣的:([Android初级]关于Adapter使用notifyDataSetChanged无效的原因和解决方案)