一个列表中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);        }    }}




更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. 不要在Android的Application对象中缓存数据!
  4. Android(安卓)init.rc文件解析过程详解
  5. Android(安卓)Provider用法
  6. 如何去掉Android(安卓)6.0 UI界面上的搜索框
  7. PC 与 Android(安卓)的adb同步通信(一)
  8. android中不同activity之间共享数据
  9. 程序代码删除联系人的分组

随机推荐

  1. android in practice_Displaying splash
  2. ConstraintLayout使用笔记
  3. Augmented reality
  4. sqlite的使用及其框架
  5. ndk下载地址
  6. Android(安卓)IPC Compared with Java Na
  7. Could not find com.android.tools.build
  8. android-Java中实现删除文件 - 随心
  9. Android(安卓)多线程下载
  10. Xamarin.Android(安卓)4.10.01068 & Xama