recyclerView.Adapter主要方法及执行顺序
recyclerview适配器Adapter中主要方法有构造方法、onCreateViewHolder、onBindViewHolder、getItemViewType、getItemCount五个主要方法;
主要的方法的执行顺序为:构造方法 –> getItemViewType –> onCreateViewHolder –> onBindViewHolder
在同一个recyclerView中显示不同有UI并且每类UI的数据结构也不同
针对不同的数据结构,先创建数据的基类IBaseData,定义不的类型常量如TYPE_FIRST=1及默认类型TYPE_NULL=-1,对外暴露获取类型的方法与获取数据T的方法;
1 | public interface IBaseData<T> { |
新建类BaseDataImpl实现之前创建的数据基类IBaseData,通过构造方法传不同的数据类型的实例bean;
1 | public class BaseDataImpl implements IBaseData { |
针对不同的UI类型,创建所有viewHolder的基类BaseViewHolder,传入布局layoutId,统一创建当前类型的界面,再由不同子类通过findViewById去查找使用子控件;关键方法是bindViewHolder(IBaseData data, int position)来调用adapter的根方法onBindViewHolder(BaseViewHolder holder, int position),这样就实现了不同界面的viewHolder处理不同界面的数据,各自不干扰;
1 | public abstract class BaseViewHolder extends RecyclerView.ViewHolder { |
新建recyclerView的adapter类MyAdapter,实现构造方法、onCreateViewHolder、onBindViewHolder、getItemViewType、getItemCount五个主要方法,adapter类以List<BaseDataImpl>界面数据集合,根据BaseDataImpl的不同type来创建和绑定不同的viewHolder;
1 | public class MyAdapter extends RecyclerView.Adapter<BaseViewHolder> { |
其中LeftTextViewHolder是BaseViewHolder的实现类,对应的数据结构LeftData与界面布局item_left_text如下,RightData与LeftData数据结构一样,item_right_text布局靠右对齐,item_left_text靠左对齐;
1 | public class LeftData { |
1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
在界面类RecyclerViewActivity中引中新建的adapter类,并传入不同类型的数据,如LeftData封装进BaseDataImpl统一由MyAdapter处理
1 | public class RecyclerViewActivity extends AppCompatActivity { |
界面显示效果如下,这样就实现了在同一个recyclerView中显示不同样式的布局。
