RecyclerView 中的 Android RecyclerView?

标签 android android-recyclerview

我正在使用显示不同类别列表的 RecyclerView。每行项目还包含 RecyclerView 以显示类别项目列表。父级 RecyclerView 由垂直 LinearLayoutManager 填充,子级 RecyclerViewsGridLayoutManager 填充(2 列)。子 RecyclerViews 不显示除前 2 个之外的所有类别项目,即使它有很多类别项目。所有剩余的类别项目都隐藏在特定类别中。换句话说,您可以说子级 RecyclerView 没有扩展到它包含的项目那么多。

我在这里找到了不同的解决方案,但没有人奏效。这就是为什么再次发帖。

最佳答案

您可以使用这个 library 仅用一个 RecyclerView 轻松实现它.见下图:

enter image description here

首先创建一个Section类:

class MySection extends StatelessSection {

    String title;
    List<String> list;

    public MySection(String title, List<String> list) {
        // call constructor with layout resources for this Section header, footer and items 
        super(R.layout.section_header, R.layout.section_item);

        this.title = title;
        this.list = list;
    }

    @Override
    public int getContentItemsTotal() {
        return list.size(); // number of items of this section
    }

    @Override
    public RecyclerView.ViewHolder getItemViewHolder(View view) {
        // return a custom instance of ViewHolder for the items of this section
        return new MyItemViewHolder(view);
    }

    @Override
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyItemViewHolder itemHolder = (MyItemViewHolder) holder;

        // bind your view here
        itemHolder.tvItem.setText(list.get(position));
    }

    @Override
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
        return new MyHeaderViewHolder(view);
    }

    @Override
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {
        MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder;

        // bind your header view here
        headerHolder.tvItem.setText(title);
    }
}

然后您使用您的 Sections 设置 RecyclerView:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();

// Create your sections with the list of data for each year
MySection section1 = new MySection("Categories 1", categories1DataList);
MySection section2 = new MySection("Categories 2", categories2DataList);

// Add your Sections to the adapter
sectionAdapter.addSection(section1);
sectionAdapter.addSection(section2);

// Set up your RecyclerView with the SectionedRecyclerViewAdapter
GridLayoutManager glm = new GridLayoutManager(getContext(), 2);
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        switch(sectionAdapter.getSectionItemViewType(position)) {
            case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER:
                return 2;
            default:
                return 1;
        }
    }
});
recyclerView.setLayoutManager(glm);
recyclerView.setAdapter(sectionAdapter);

关于RecyclerView 中的 Android RecyclerView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484655/

相关文章:

android:textColor 不再适用于 Marshmallow

java - This release is not compliant with the Google Play 64-bit requirement error still after adding libraries

java - Android :RecyclerView working strange in Android 6 and 7 , 在 5 中工作正常

java - 运行应用程序后 RecyclerView 列表不显示任何内容

java - RecyclerView 显示相同的项目

android - NestedScrollView & RecyclerView, onLongPress 事件

android - net::ERR_FILE_NOT_FOUND file:///android_asset/www/index.html 找不到

android - 如何在 View 内的特定位置触发 Android Lollipop 的涟漪效应,而不触发触摸事件?

android - 新的 Jetpack 分页库使应用程序崩溃 - 新

android - 如何从上下文菜单获取有关 RecyclerView 项目的信息