这片主要写的是ListAdapter和RecycleAdapter的比较:
ListAdapter基本代码:
public class TestAdapter extends ListAdapter<Integer,TestAdapter.MyViewHolder> {
//这个是用来处理两个列表差别的,差异化处理化的回调。
//列表数据的差异化处理是后台异步进行的
public TestAdapter(){
super(new DiffUtil.ItemCallback<Integer>() {
/**
* 比较列表中的两个元素是否相同
* @param oldItem
* @param newItem
* @return
*/
@Override
public boolean areItemsTheSame(@NonNull Integer oldItem, @NonNull Integer newItem) {
return oldItem==newItem;
}
/**
* 比较列表中的两个内容是否相同
* @param oldItem
* @param newItem
* @return
*/
@Override
public boolean areContentsTheSame(@NonNull Integer oldItem, @NonNull Integer newItem) {
return false;
}
});
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
RecycleAdapter基本代码:
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.MyViewHolder> {
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
相比较的话,ListAdapter没有
@Override
public int getItemCount() {
return 0;
}
添加了:
public class TestAdapter extends ListAdapter<Integer,TestAdapter.MyViewHolder>
泛型第一个参数是需要展示数据类型,这里随便写了个Integer
还有就是构造方法里面需要写一个:
super(new DiffUtil.ItemCallback<Integer>() {
/**
* 比较列表中的两个元素是否相同
* @param oldItem
* @param newItem
* @return
*/
@Override
public boolean areItemsTheSame(@NonNull Integer oldItem, @NonNull Integer newItem) {
return oldItem==newItem;
}
/**
* 比较列表中的两个内容是否相同
* @param oldItem
* @param newItem
* @return
*/
@Override
public boolean areContentsTheSame(@NonNull Integer oldItem, @NonNull Integer newItem) {
return oldItem==newItem;
}
});
比较内容的话,如果是字符串就可以用equals
Kotlin代码例子:
class PagerPhotoListAdapter: ListAdapter<PhotoItem, PagerPhotoViewHolder>(DiffCallback) {
object DiffCallback:DiffUtil.ItemCallback<PhotoItem>(){
override fun areItemsTheSame(oldItem: PhotoItem, newItem: PhotoItem): Boolean {
return oldItem === newItem
}
override fun areContentsTheSame(oldItem: PhotoItem, newItem: PhotoItem): Boolean {
TODO("Not yet implemented")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PagerPhotoViewHolder {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: PagerPhotoViewHolder, position: Int) {
TODO("Not yet implemented")
}
}
class PagerPhotoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)