1. 如果可以, 請設(shè)置setHasFixedSize(true)
當你的列表數(shù)據(jù)數(shù)量不變時, 請設(shè)置這個屬性 . 設(shè)置之后當有數(shù)據(jù)更新時, 列表不會整體刷新, 而只會更新具體的子view.
2. 在onCreateViewHolder(…)中設(shè)置onclick listener.
不論何時用戶點擊元素時, 通過vh.getAdapterPosition() 可以獲得當前所在的位置, 因此也就可以把點擊事件和具體數(shù)據(jù)對應(yīng)起來.
記得不要忘記檢查返回的位置是否可用就行了 if(pos != NO_POSITION) {}
3. 當存在多個ViewType時, 使用布局id來作為viewType.
大膽用吧, 這是官方鼓勵的.
4. 使用DiffUtil 來判斷哪些元素變化了.
notifyDataSetChanged是一個耗時的操作, 要盡量少用.
DiffUtil最棒的一點是可以只更新某個條目上的某個字段, 而不需要刷新整個元素. 具體的使用方法, 請參考https://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00