【问题标题】:Setting ListView scroll position nicely in Android在 Android 中很好地设置 ListView 滚动位置
【发布时间】:2010-07-22 21:06:49
【问题描述】:

我知道setSelection()setSelectionFromTop()setSelectionAfterHeaderView(),但它们似乎都没有按照我的意愿行事。

给定列表中的一个项目,我想滚动它以使其可见。如果该项目在列表的可见窗口上方,我想滚动直到该项目是列表中的第一个可见项目;如果该项目位于可见窗口下方,我希望它向上滚动,直到它是列表中的最后一个可见项目。如果该项目已经可见,我不希望发生任何滚动。

我该怎么做?

【问题讨论】:

  • 你提到的那些方法为什么不起作用?当你在你想要的项目上设置选择时会发生什么? (我知道这是一个老问题。如果您现在已经解决了这个问题,请发布您的解决方案,我将不胜感激)
  • @T3Roar:我确实解决了它,结合 setSelection() 和 setSelectionFromTop(),担心列表高度和项目高度,当然还有项目在列表中的位置。恐怕这是一团糟,而且我无论如何也不能分享代码——但它是可以解决的。也许如果我有机会我会写一个我可以分享的通用解决方案,但是我现在所拥有的只是在我已经掌握的上下文之外没有用。对不起!
  • 我很高兴只使用了一些 setSelection() 来实现,而不是其他一些疯狂的解决方法。感谢您的回复:)
  • 嗨,Carl,您是否针对此问题制定了更通用的解决方案?我正在处理一个列表视图,我需要一个类似的行为来设置一个项目的选择。如果您能分享您在此问题上所做的更多知识或工作,我将不胜感激。谢谢!
  • 恐怕我没有,@Gix,但感谢您的提醒。我应该这样做;很抱歉,我还没有得到它。

标签: android listview scroll


【解决方案1】:

这是因为 listView 尚未创建。尝试发布可运行的内容,例如:

getListView().postDelayed(new Runnable() {          
    @Override
    public void run() {
        lst.setSelection(15);
    }
},100L);

【讨论】:

    【解决方案2】:

    我想,我一直在寻找相同的,然后我找到了以下解决方案:

    if (listview.getFirstVisiblePosition() > pos 
        || listview.getLastVisiblePosition() <= pos) {
        listview.smoothScrollToPosition(pos);
    }
    

    API 8 是使用smoothScrollToPosition 所必需的(无论如何这是一个合理的最低要求),所以你要知道。

    【讨论】:

      【解决方案3】:

      Sergey 的回答有效,但我认为正确的做法是设置一个观察者,以便在创建 ListView 时收到通知。

      listView.getViewTreeObserver().addOnGlobalLayoutListener(
           new ViewTreeObserver.OnGlobalLayoutListener() {
       @Override
       public void onGlobalLayout() {
           scrollTo(scrollToPosition);
           listView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
       }
      });
      

      【讨论】:

      【解决方案4】:

      Sergey's answer 的更好解决方案是在 Activity/Fragment 生命周期的后期调用setSelection(),也许在onStart() 中。这样,您就可以保证视图已准备就绪,而不是使用任意延迟。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2015-10-08
        相关资源
        最近更新 更多