如何使用LinearLayoutManager实现可扩展项(随Android L引入)

如何使用LinearLayoutManager实现可扩展项(随Android L引入),android,expandablelistview,android-5.0-lollipop,android-recyclerview,Android,Expandablelistview,Android 5.0 Lollipop,Android Recyclerview,RecyclerView已随Android L推出,是AppCompat v7库的一部分。然后我决定用这个全新的RecyclerView更新我的应用程序,以取代我的ListViews。 为此,在为RecyclerView设置LayoutManager时,我使用的是LinearLayoutManager,效果很好 这里有一些困难:当我想将我的可扩展列表视图更改为可回收视图。 由于谷歌还没有创建一个“ExpandableLayoutManager”,这是相当棘手的,我无法做到这一点 提到了子对象,但

RecyclerView
已随Android L推出,是AppCompat v7库的一部分。然后我决定用这个全新的
RecyclerView
更新我的应用程序,以取代我的
ListView
s。 为此,在为
RecyclerView
设置
LayoutManager
时,我使用的是
LinearLayoutManager
,效果很好

这里有一些困难:当我想将我的
可扩展列表视图
更改为
可回收视图
。 由于谷歌还没有创建一个“
ExpandableLayoutManager
”,这是相当棘手的,我无法做到这一点

提到了子对象,但它似乎是
RecyclerView
的根视图的子对象,而不是子对象本身

有人有解决办法或线索吗? 或者至少提供一些信息,如从何处开始,以便我可以实现自己的
布局管理器

这有助于您将项目分组到“部分”,然后您可以实现下面的展开/折叠功能

首先,创建section类:

class MySection extends StatelessSection {

    String header;
    List<String> list;
    boolean expanded = true;

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

    @Override
    public int getContentItemsTotal() {
        return expanded? list.size() : 0;
    }

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

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

        headerHolder.tvTitle.setText(title);

        headerHolder.rootView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                expanded = !expanded;
                headerHolder.imgArrow.setImageResource(
                        expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp
                );
                sectionAdapter.notifyDataSetChanged();
            }
        });
    }

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

需要一个自定义视图,现在正在处理一个,完成后会更新。当然,我开始了很多次,但这是一个很大的工作,我总是坚持与LayoutManager。。。
// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();

// Add your Sections
sectionAdapter.addSection(new MySection("Section 1", Arrays.asList(new String[] {"Item 1", "Item 2", "Item 3", "Item 4" })));
sectionAdapter.addSection(new MySection("Section 2", Arrays.asList(new String[] {"Item 1", "Item 2" })));

// Set up your RecyclerView with the SectionedRecyclerViewAdapter
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(sectionAdapter);