传统的适配器
在 Android 项目中,基本上都会有列表功能,而现在的列表功能都是通过 RecyclerView 实现的,当项目中列表功能比较多的时候,每一个 RecyclerView 都需要一个 Adapter 适配器,这样会使得项目中的 Adapter 类非常的多。所以,封装一个万能的 RecyclerView 适配器是可以提高我们的开发效率的。在这之前,我们先来看一下传统适配器配合 RecyclerView 是怎样使用的。
我们先来看一下我们要实现的例子的样子,如下所示:
适配器 Adapter 的代码如下所示:
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> {
private OnItemClickListener onItemClickListener;
private RecyclerView mRv;
private List<String> dataSource;
private Context mContext;
private int addDataPosition = -1;
public MyRecyclerViewAdapter(Context context, RecyclerView recyclerView) {
this.mContext = context;
this.dataSource = new ArrayList<>();
this.mRv = recyclerView;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void setDataSource(List<String> dataSource) {
this.dataSource = dataSource;
notifyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_layout, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int position) {
myViewHolder.mIv.setImageResource(getIcon(position));
myViewHolder.mTv.setText(dataSource.get(position));
// 只在瀑布流布局中使用随机高度
if (mRv.getLayoutManager().getClass() == StaggeredGridLayoutManager.class) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getRandomHeight());
myViewHolder.mTv.setLayoutParams(params);
} else {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
myViewHolder.mTv.setLayoutParams