我想在Recycler View中添加2个Section Headers。 我想在Header中开发Header。 我不想使用Expandable view.I需要它在Scroll-able视图中。
我想将游览名称显示为第一个标题。 在那之下,我想将位置显示为第二个标题
答案 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}},但该部分使用蓝色文本背景。您可以根据需要更改原始布局和截面布局。