1.RecyclerView 中实现分组的过程其实和ListView中分组的方式基本上是相同的。
2.为什么RecyclerView不能像ExpandableListView 中的数据那么容易一目了然的看出来应该是二维数组形式的数据展示模型。
3.具体请看下面的代码
private RecyclerView lisv_rootview; private static final int TYPE_CONTENT = 0; private static final int TYPE_HEAD = 1; private static final int TYPE_FOOTER = 2; private List<Bean> list; private MyAdapter adapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); initView(); list = new ArrayList<>(); for (int i = 0; i < 10; i++) { Bean bean = new Bean(); List<String> lis = new ArrayList<>(); for (int j = 0; j < i; j++) { lis.add(i + "=" + j); } bean.setDataList(lis); bean.setHeader(i + "+head"); bean.setFooter(i + "footer"); list.add(bean); } adapter = new MyAdapter(); lisv_rootview.setLayoutManager(new LinearLayoutManager(this)); lisv_rootview.setAdapter(adapter); } private void initView() { lisv_rootview = (RecyclerView) findViewById(R.id.lisv_rootview); } private class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private TextView textView_content; private TextView textView_footer; @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater mInflater = LayoutInflater.from(FourActivity.this); switch (viewType) { case TYPE_CONTENT: ViewGroup vImage = (ViewGroup) mInflater.inflate(R.layout.item_content, parent, false); ViewContentHolder vhImage = new ViewContentHolder(vImage); return vhImage; case TYPE_HEAD: ViewGroup vGroup = (ViewGroup) mInflater.inflate(R.layout.item_header, parent, false); ViewHeadHolder vhGroup = new ViewHeadHolder(vGroup); return vhGroup; case TYPE_FOOTER: ViewGroup footer = (ViewGroup) mInflater.inflate(R.layout.item_footer, parent, false); ViewFooterHolder vhfooter = new ViewFooterHolder(footer); return vhfooter; } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { int count = 0; for (int i = 0; i < list.size(); i++) { Bean bean = list.get(i); List<String> dataList = bean.getDataList(); if (position == count) { ViewHeadHolder vGroup = (ViewHeadHolder) holder; vGroup.textView_head.setText(bean.getHeader()); } count++; for (int j = 0; j < dataList.size(); j++) { if (position == count) { ViewContentHolder vhImage = (ViewContentHolder) holder; vhImage.textView_content.setText(dataList.get(j)); } count++; } if (position == count) { ViewFooterHolder vhImage = (ViewFooterHolder) holder; vhImage.textView_footer.setText(bean.getFooter()); } count++; } } @Override public int getItemViewType(int position) { int count = 0; for (int i = 0; i < list.size(); i++) { Bean bean = list.get(i); List<String> dataList = bean.getDataList(); if (position == count) { return TYPE_HEAD; } count++; for (int j = 0; j < dataList.size(); j++) { if (position == count) { return TYPE_CONTENT; } count++; } if (position == count) { return TYPE_FOOTER; } count++; } return 0; } @Override public int getItemCount() { int count = list.size() * 2; for (int i = 0; i < list.size(); i++) { Bean bean = list.get(i); List<String> dataList = bean.getDataList(); count += dataList.size(); } return count; } public class ViewHeadHolder extends RecyclerView.ViewHolder { public View rootView; public TextView textView_head; public ViewHeadHolder(View rootView) { super(rootView); this.rootView = rootView; this.textView_head = (TextView) rootView.findViewById(R.id.textView_head); } } public class ViewContentHolder extends RecyclerView.ViewHolder { public View rootView; public TextView textView_content; public ViewContentHolder(View rootView) { super(rootView); this.rootView = rootView; this.textView_content = (TextView) rootView.findViewById(R.id.textView_content); } } public class ViewFooterHolder extends RecyclerView.ViewHolder { public View rootView; public TextView textView_footer; public ViewFooterHolder(View rootView) { super(rootView); this.rootView = rootView; this.textView_footer = (TextView) rootView.findViewById(R.id.textView_footer); } } }
平时我们不愿意用这个分组;但是遇到性能需要的时候还是用这种分组形式比较好,
demo 下载地址
http://download.csdn.net/detail/u012629497/9605391