一个RecyclerView列表显示多种类型的Item
16lz
2021-01-26
一个列表中Item的显示可能有多种类型,比如Item的界面有多个类型,或者Item的数据有多个类型。
以下自定义了一个Adapter的框架结构,代码简洁,只需稍作修改就可以使用。
/** * 一个RecyclerView显示多种不同数据类型或界面的Item * ldw */public class MyAdapter extends RecyclerView.Adapter { private static final int ITEM_VIEW_TYPE_HEADER = 0; private static final int ITEM_VIEW_TYPE_ITEM = 1; /** 数据列表,数据包含HeaderBean和ItemBean,且两者都继承于Bean */ private List dataList; private Context context; public MyAdapter(Context context, List list) { this.context = context; dataList = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_VIEW_TYPE_HEADER) { return new HeaderHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_header, parent, false)); } else { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_text, parent, false); return new ItemHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { if (getItemViewType(position) == ITEM_VIEW_TYPE_HEADER) { HeaderHolder headerHolder = (HeaderHolder) holder; HeaderBean itemBean = (HeaderBean) dataList.get(position); headerHolder.textView.setText(itemBean.getName()); } else { ItemHolder itemHolder = (ItemHolder) holder; ItemBean itemBean = (ItemBean) dataList.get(position); itemHolder.textView.setText(itemBean.getName()); } } @Override public long getItemId(int i) { return i; } @Override public int getItemCount() { return dataList.size(); } @Override public int getItemViewType(int position) { return isHeader(position) ? ITEM_VIEW_TYPE_HEADER : ITEM_VIEW_TYPE_ITEM; } private boolean isHeader(int position) { return dataList.get(position) instanceof HeaderBean; } public class HeaderHolder extends RecyclerView.ViewHolder { private View image; private TextView textView; public HeaderHolder(View itemView) { super(itemView); image = itemView.findViewById(R.id.header_image); textView = (TextView) itemView.findViewById(R.id.header_text); } } public class ItemHolder extends RecyclerView.ViewHolder { private TextView textView; public ItemHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.item_text); } }}
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- 不要在Android的Application对象中缓存数据!
- Android(安卓)init.rc文件解析过程详解
- Android(安卓)Provider用法
- 如何去掉Android(安卓)6.0 UI界面上的搜索框
- PC 与 Android(安卓)的adb同步通信(一)
- android中不同activity之间共享数据
- 程序代码删除联系人的分组