具有可扩展项目的 RecyclerView

RecyclerView with expandable items

我需要制作一个可展开的 RecyclerView,每次点击只能打开一个项目(所有其他项目都必须关闭)。 我知道有可能在 ExpandableListView 的帮助下做到这一点,然后使用下一个代码:

elv.setOnGroupExpandListener(new OnGroupExpandListener() {

    @Override
    public void onGroupExpand(int groupPosition) {
            if (lastExpandedPosition != -1
                    && groupPosition != lastExpandedPosition) {
                elv.collapseGroup(lastExpandedPosition);
            }
            lastExpandedPosition = groupPosition;
    }
});

但是有没有办法用 RecyclerView 做同样的事情?

你可以使用一些库来完成,我会推荐Advanced RecyclerView

看看Advanced RecyclerView. And here是展开项的例子

Here is a nice tutorial for expending RecyclerView from Big Nerd Ranch

总结:

  • 定义两种布局:一种用于父项,一种用于子项。
  • 为这些布局定义两个 ViewHolder。
  • 为父对象和子对象定义两个 类。
  • 父对象必须实现 ParentObject 接口。
  • 定义自定义适配器。
  • 在适配器上调用 setParentAndIconExpandOnClick(true)

对于一次只有一个展开视图,您可以跟踪最后一个展开视图并在用户点击新视图时将其关闭。

如果使用 Expandable RecyclerView form big nerd ranch,这是跟踪和实现每次点击只打开一个项目的方法-

      Stack<Integer> mStack = new Stack<>();

     mRecyclerViewAdapter.setExpandCollapseListener(new ExpandableRecyclerAdapter.ExpandCollapseListener() {
                @Override
                public void onListItemExpanded(int position) {


                    try {
                        int x = mStack.pop();
                        mRecyclerViewAdapter.collapseParent(x);

                    } catch (EmptyStackException ex) {
                    }

                    mStack.push(position);


                }

                @Override
                public void onListItemCollapsed(int position) {

                    try {
                        mStack.pop();
                    } catch (EmptyStackException ex) {
                    }

                }
            });