【问题标题】:Auto scrolling in ExpandableListViewExpandableListView 中的自动滚动
【发布时间】:2012-10-06 19:10:09
【问题描述】:

我希望我的ExpandableListView 在用户展开组时自动滚动,以便展开的组标题位于屏幕顶部。我试过smoothScrollToPosition,但这只是确保扩展组在屏幕上的某处可见。我想显式滚动它,使展开的组位于顶部,如下例所示:

Before expanding Group 3:                After expanding Group 3:

+=================+                      +=================+
| Group 1         |                      | Group 3         |
+-----------------+                      +-----------------+
| Group 2         |                      |   Grp 3 Child 1 |
+-----------------+                      +-----------------+
| Group 3         |                      |   Grp 3 Child 2 |
+-----------------+                      +-----------------+
| Group 4         |                      | Group 4         |
+=================+                      +=================+

【问题讨论】:

    标签: android scroll expandablelistview


    【解决方案1】:
    ListView.setSelection(position)
    

    这将滚动到所选项目, 当你点击组项目时调用它。

    【讨论】:

    • 是否可以通过平滑滚动动画实现相同的效果?
    • 也许这可以帮助您实现平滑滚动stackoverflow.com/a/7929080/839632(但您可能需要计算列表中每个项目的高度)
    【解决方案2】:

    以下代码是适合我的解决方案

    public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) {
        // TODO Auto-generated method stub
        //mExpandableList.setSelectionFromTop(groupPosition, 0);
    
    Boolean shouldExpand = (!mExpandableList.isGroupExpanded(groupPosition));        
        mExpandableList.collapseGroup(lastClickedPosition);
    
        if (shouldExpand){
            //generateExpandableList();
            mExpandableList.expandGroup(groupPosition);
            mExpandableList.setSelectionFromTop(groupPosition, 0);
        }                
        lastClickedPosition = groupPosition;
        return true;        
    }
    

    【讨论】:

      【解决方案3】:

      这对我有用。将其放入您的适配器中:

      public void onGroupExpanded(final int groupPosition) {
          super.onGroupExpanded(groupPosition);
      
          listView.setSelectedGroup(groupPosition);
      }
      

      【讨论】:

        【解决方案4】:

        将此属性android:transcriptMode="disabled" 从 xml 添加到您的 ExpandibleListView 标记。这应该可以。

        【讨论】:

          【解决方案5】:

          这个对我有用

          expandList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                  @Override
                  public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
          
                      if (!parent.isGroupExpanded(groupPosition)) {
                          parent.expandGroup(groupPosition);
                      } else {
                          parent.collapseGroup(groupPosition);
                      }
                      parent.setSelectedGroup(groupPosition);
          
                      return true;
                  }
              });
          

          因为滚动的主要工作部分是

          parent.setSelectedGroup(groupPosition);
          

          【讨论】:

          • 如果你使用parent.expandGroup(groupPosition, true),那么动画会自动发生,你不必自己做。
          【解决方案6】:

          将android:transcriptMode="disabled" 设置为我的ExpandibleListView 也对我有用。将参数设置为“正常”时,没有一种方法有效(setSelectedGroup、setSelectionFromTop 等)。

          只有setSmoothScroll 有效,但不喜欢这种效果。

          【讨论】:

            【解决方案7】:

            下面的代码对我有用。希望它会有所帮助。在 onGroupExpand 中实现 OnGroupExpandListener 使用下面的代码

            public void onGroupExpand(final int groupPosition) {
            super.onGroupExpand(groupPosition);
            
            expandableListView.post(new Runnable() {
            
                @Override
                public void run() {
                    expandableListView.setSelection(groupPosition);
                    if(expandableListView.getChildAt(groupPosition)!=null)
                    expandableListView.requestChildRectangleOnScreen(expandableListView.getChildAt(groupPosition),
                            new Rect(0, 0, expandableListView.getChildAt(groupPosition).getRight(), expandableListView.getChildAt(groupPosition).getHeight()), false);
                }
            });
            

            }

            【讨论】:

              【解决方案8】:

              setSelectedGroup 有效,但如果您想获得平滑的滚动效果,请使用smoothScrollToPositionFromTop,如下所示:

                  expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                      @Override
                      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                          parent.smoothScrollToPositionFromTop(groupPosition,0);
                          if (expandableListView.isGroupExpanded(groupPosition))
                              expandableListView.collapseGroupWithAnimation(groupPosition);
                          else expandableListView.expandGroupWithAnimation(groupPosition);
                          return true;
                      }
                  });
              

              【讨论】:

                猜你喜欢
                • 2012-04-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-04-03
                • 1970-01-01
                相关资源
                最近更新 更多