挑战练习10.6 实现高效的RecyclerView刷新
把原本使用的Adapter的notifyDataSetChanged方法换成定位刷新RecyclerView.Adapter的notifyItem。
1.在CrimeListFragment里面定义一个全局变量
1 private static int mCrimeIndex;
2.修改CrimeListFragment下的onClick方法
1 @Override 2 public void onClick(View v) { 3 Intent intent = CrimeActivity.newIntent(getActivity(),mCrime.getmId()); 4 mCrimeIndex = getAdapterPosition();//返回数据在Adapter中的位置 5 //Log.d("onClick","mCrimeIndex "+mCrimeIndex); 6 startActivity(intent); 7 }
3.修改updateUI方法
1 private void updateUI(){ 2 CrimeLab crimeLab = CrimeLab.get(getActivity()); 3 List<Crime> crimes = crimeLab.getmCrimes(); 4 if(mAdapter == null){ 5 mAdapter = new CrimeAdapter(crimes); 6 mCrimeRecyclerView.setAdapter(mAdapter); 7 }else { 8 //重绘当前可见区域 9 //mAdapter.notifyDataSetChanged(); 10 11 //部分重绘 12 mAdapter.notifyItemChanged(mCrimeIndex); 13 } 14 }
4.运行效果:
5.用调试信息输出看看mCrimeIndex的变化,可以得知后退时没有变化