RecyclerView具有可扩展的项目

时间:2015-09-18 07:13:18

标签: android listview android-recyclerview

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

elv.setOnGroupExpandListener(new OnGroupExpandListener() {

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

但有没有办法使用RecyclerView

5 个答案:

答案 0 :(得分:3)

Here是一个很好的教程,用于从Big Nerd Ranch消费RecyclerView

要点:

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

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

答案 1 :(得分:1)

您不应该使用任何库进行此项使用this

您可以使用此notifyItemChanged(int)执行此操作,而无需使用任何其他库

只要调用notifyItemChanged(int),只要有数据更改,它就可以使用动画。并添加

android:animateLayoutChanges="true"

到您的列表项目根

答案 2 :(得分:0)

你可以通过使用一些库来实现,我建议Advanced RecyclerView

答案 3 :(得分:0)

看看Advanced RecyclerViewhere是可扩展项的示例。

答案 4 :(得分:0)

如果使用可扩展的RecyclerView形成大书呆子牧场,这里是每次点击仅跟踪和实施一个开放项目的方式 -

      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) {
                    }

                }
            });