【问题标题】:ExpandableListView onExpand always scroll expanded group to topExpandableListView onExpand 总是将展开的组滚动到顶部
【发布时间】:2012-10-05 09:57:41
【问题描述】:

我正在寻找在展开时将 expandableListView 组置于顶部的方法。 我试过onGroupExpand,或者ExpandableListView的performItemClick。

setSelectedPositionFromTop(int, int), partialy 有效,但如果它在系统启动它自己的滚动时启动,则列表被过度滚动,并且组超出屏幕。

抱歉,描述混乱,但如果不准确说明我需要什么,就很难说。

【问题讨论】:

    标签: android expandablelistview


    【解决方案1】:

    将转录模式更改为禁用。

    android:transcriptmode="disabled"
    

    在可展开的列表布局中。

    【讨论】:

    • 你可以省略这个属性。它在没有转录模式的情况下对我有用。
    • @DennySharma 您可以省略此属性,因为禁用模式是默认模式。这来自文档:“禁用转录模式。这是默认值。”请看这里:developer.android.com/reference/android/widget/…
    • 在 xml 中使用此属性:android:transcriptMode="disabled" 此属性可用@DennySharma
    【解决方案2】:

    把它放在你的适配器中:

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

    【讨论】:

      【解决方案3】:

      在 onGroupExpand(int groupPosition) 中尝试 setSelection(groupPosition)。

      【讨论】:

      • 它仅在某些情况下有效,如果假设我的组位于底部,它将在同一时刻设置选择,然后滚动以显示子项,而不是组被过度滚动到屏幕之外。
      • @Drake29a 您好,您的问题解决了吗?在我的情况下,组也被过度滚动到屏幕外?
      • 我的回答解决了这个问题,这是被接受的。这是一个讨厌的把戏,但没有其他解决方案。我现在无法检查其他解决方案,因为我无法访问那个旧代码。
      【解决方案4】:

      我尝试了很多解决方案,但下面的代码对我有用。希望这段代码对某些人有所帮助。在 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);
              }
          });
      }
      

      【讨论】:

        【解决方案5】:

        我有解决这个问题的办法。这不是一个温和的,但它工作得很好。 可扩展的 listView 问题是它应该按子编号移动。看来,该系统认为孩子与父母(组)的高度相同,因此如果您放置不同大小的孩子,则会导致自动滚动列表出现问题。

        我的解决方案是欺骗列表认为它有更多的孩子。 如果我的孩子是组的两倍,我只返回该组有 2 个孩子的信息。现在,由于它是数据构造列表,我检查我的数据,是否有 2 个孩子的数据,或者只有 1 个,如果我没有第二个孩子的数据,我知道我可以将 0 高度视图作为第二个孩子。

        当我不得不与小组一起制作列表时,它工作得很好,而不是与 1 个大孩子。

        由于我的问题没有答案,我发布了这个,它可能对某人有所帮助。

        【讨论】:

        • 感谢您的投票,这不会改变你们都无法提供帮助,并且解决方案仍在按预期工作。
        • 试试我上面的新解决方案。
        • 一天就够了
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 2017-03-21
        • 2020-01-15
        • 2018-07-31
        相关资源
        最近更新 更多