gpt4 book ai didi

android - 如何在 Recycler View 中添加 2 个部分标题?

转载 作者:搜寻专家 更新时间:2023-11-01 09:28:24 25 4
gpt4 key购买 nike

我想在 Recycler View 中添加 2 个 Section Headers..我想在 Header 中开发 Header。我不想使用可扩展 View 。我需要在可 ScrollView 中使用它。

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

最佳答案

您可以通过在 RecyclerView 中使用不同的 View 类型来实现这一点。

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

这是该数据类的示例。

// 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 boolean 相应设置。

在适配器中定义getItemViewType 方法,它告诉回收器 View 将有两种类型,行类型部分类型,以及我们将通过查看上述数据对象中的 isRow bool 值来指定它们的位置。

这是适配器类的示例。

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();
}

}

在此示例中,它只是对两者都使用标准的 simple_list_item_1,但该部分的文本背景为蓝色。您可以根据需要更改原始布局和部分布局。

关于android - 如何在 Recycler View 中添加 2 个部分标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49314509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com