我想在“回收”视图中添加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/

10-09 02:40