如何在Recycler View中添加2个Section Headers?

时间:2018-03-16 06:31:16

标签: android android-recyclerview

我想在Recycler View中添加2个Section Headers。 我想在Header中开发Header。 我不想使用Expandable view.I需要它在Scroll-able视图中。

我想将游览名称显示为第一个标题。 在那之下,我想将位置显示为第二个标题

2 个答案:

答案 0 :(得分:1)

您必须将对象列表传递给适配器,该对象列表指定是否插入数据。 添加调试器并对其进行测试。

答案 1 :(得分:0)

您可以在// In a fuller example, this would probably hold more data than just strings. public class SectionOrRow { private String row; private String section; private boolean isRow; public static SectionOrRow createRow(String row) { SectionOrRow ret = new SectionOrRow(); ret.row = row; ret.isRow = true; return ret; } public static SectionOrRow createSection(String section) { SectionOrRow ret = new SectionOrRow(); ret.section = section; ret.isRow = false; return ret; } public String getRow() { return row; } public String getSection() { return section; } public boolean isRow() { return isRow; } } 中使用不同的视图类型来实现此目的。

首先,您需要将一个对象列表传递给您的回收器视图适配器,以指定是否应将数据用作节头。

这是该数据类的一个示例。

SectionOrRow.createRow("a normal row")

使用SectionOrRow.createSection("a section header")isRow创建这些对象的数据列表,并相应地设置getItemViewType 布尔值

在适配器中定义isRow方法,它告诉回收站视图将有两种类型,行类型类型,我们&#39 ; ll通过查看上面数据对象中的public class SectionRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static final int VIEW_TYPE_SECTION = 0; public static final int VIEW_TYPE_ITEM = 1; private List<SectionOrRow> mData; public MyRecycler(List<SectionOrRow> data) { mData = data; } public class RowViewHolder extends RecyclerView.ViewHolder{ private TextView textView; public RowViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(android.R.id.text1); } } public class SectionViewHolder extends RecyclerView.ViewHolder{ private TextView textView; public SectionViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(android.R.id.text1); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==VIEW_TYPE_SECTION) { View v = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); v.findViewById(android.R.id.text1).setBackgroundColor(Color.BLUE); return new SectionViewHolder(v); } else { View v = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); return new RowViewHolder(v); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { SectionOrRow item = mData.get(position); if(item.isRow()) { RowViewHolder h = (RowViewHolder) holder; h.textView.setText(item.getRow()); } else { SectionViewHolder h = (SectionViewHolder) holder; h.textView.setText(item.getSection()); } } @Override public int getItemViewType(int position) { super.getItemViewType(position); SectionOrRow item = mData.get(position); if(!item.isRow()) { return VIEW_TYPE_SECTION; } else { return VIEW_TYPE_ITEM; } } @Override public int getItemCount() { return mData.size(); } } 布尔值来指定这些位置。

这是Adapter类的一个例子。

simple_list_item_1

在这个示例中,它只使用标准{{1}},但该部分使用蓝色文本背景。您可以根据需要更改原始布局和截面布局。