package com.mcxtzhang.diffutilsdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.util.DiffUtil; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ArrayList<TestBean> mDatas; private RecyclerView mRv; private DiffAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); mRv = (RecyclerView) findViewById(R.id.rv); mRv.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new DiffAdapter(this, mDatas); //mAdapter.setData(mDatas); mRv.setAdapter(mAdapter); } public void change(View view) { try { ArrayList<TestBean> newDatas = new ArrayList<>(); for (TestBean bean : mDatas) { newDatas.add(bean.clone()); } /*newDatas.add(new TestBean("赵子龙", "帅", R.drawable.pic6)); newDatas.get(0).setDesc("Android+"); newDatas.get(0).setPic(R.drawable.pic7);*/ TestBean testBean = newDatas.get(1); //newDatas.remove(testBean); newDatas.add(1,testBean); //新宠 DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DiffCallBack(mDatas, newDatas), true); diffResult.dispatchUpdatesTo(mAdapter); //别忘了将新数据给Adapter mDatas = newDatas; mAdapter.setDatas(mDatas); //mAdapter.notifyDataSetChanged();//以前我们只能这样,现在我们有新宠了 ,实验二 验证notifyDataSetChanged getAdapterPosition为-1,也用的上 } catch (CloneNotSupportedException e) { e.printStackTrace(); } } private void initData() { mDatas = new ArrayList<>(); mDatas.add(new TestBean("张旭童1", "Android", R.drawable.pic1)); mDatas.add(new TestBean("张旭童2", "Java", R.drawable.pic2)); mDatas.add(new TestBean("张旭童3", "背锅", R.drawable.pic3)); mDatas.add(new TestBean("张旭童4", "手撕产品", R.drawable.pic4)); mDatas.add(new TestBean("张旭童5", "手撕测试", R.drawable.pic5)); } }