我想在“回收”视图中添加2个节标题。
我想在一个头部内发展头部。
我不想使用可展开视图。我需要它在可滚动视图。
我想把巡演名称显示为第一个标题。
下面我想把位置显示为第二个标题
最佳答案
您可以通过在RecyclerView
中使用不同的视图类型来实现这一点。
首先,需要将对象列表传递给recycler视图适配器,该适配器指定数据是否应用作节头。
下面是该数据类的一个示例。
// 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
布尔值。在adapter中定义
getItemViewType
方法,它告诉recycler视图将有两种类型,行类型和节类型,我们将通过查看上面的数据对象中的isRow
布尔值来指定它们在哪个位置。下面是适配器类的一个示例。
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/