【问题标题】:RecyclerView with expandable items带有可扩展项目的 RecyclerView
【发布时间】:2015-12-15 05:54:05
【问题描述】:

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

elv.setOnGroupExpandListener(new OnGroupExpandListener() {

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

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

【问题讨论】:

标签: android listview android-recyclerview


【解决方案1】:

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

总结:

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

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

【讨论】:

  • 它只是链接到 BigNerdRanch,而不是教程。但你可能会链接我添加的相同链接。
  • 对不起,忘记添加实际链接:)
  • 你比我快。我没有注意到你的回答:)
  • 谢谢,但是有没有什么方法可以在其他项目打开时关闭所有其他项目?
  • 没有默认方式。您必须保留展开对象的列表并在单击新对象时关闭前一个对象。
【解决方案2】:

看看Advanced RecyclerView。而here就是可展开项的例子。

【讨论】:

    【解决方案3】:

    你可以使用一些库来做到这一点,我会推荐Advanced RecyclerView

    【讨论】:

      【解决方案4】:

      如果使用 Expandable 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) {
                          }
      
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 1970-01-01
        • 2021-01-20
        相关资源
        最近更新 更多