【问题标题】:ListView scroll to selected itemListView 滚动到所选项目
【发布时间】:2010-08-17 13:50:40
【问题描述】:

我有一个带有编辑文本和下方按钮的 ListView。当我单击 listView 项目时,键盘会出现并向上推编辑文本和按钮。我希望列表滚动到所选项目。任何想法?谢谢

【问题讨论】:

标签: android


【解决方案1】:

您可以使用 ListView 的setSelection(int position) 方法滚动到一行。

【讨论】:

  • 这对我不起作用。我在developer.android.com/reference/android/widget/… 使用了smoothScrollToPostion(position)。重要提示:我必须在适配器上调用 notifyDataSetChanged() 后调用它。
  • 请注意,这会将您带到该位置,但与其他答案一样,smoothScrollToPosition 实际上会滚动到该位置。如果您希望向用户显示某些内容,则两者都可以使用,因此您希望它看起来如何。
  • 只有一项时如何让listview滚动到顶部?
  • @SilentNot 这将起作用,您只需在 notifyDataSetChanged() 之后以及在列表视图中完成更改之后调用。这意味着,您必须使用 listView.post() 在可运行文件中调用它。
  • @Rishabh 错了。公共 int scrollToFile(String fname) { int index = dirContentsAdapter.indexOf(fname); dirContents.smoothScrollToPosition(index);回报指数; } 这行得通!
【解决方案2】:

您可以使用 ListView 的 smoothScrollToPosition(int position) 滚动到列表中的特定位置。

【讨论】:

  • 因为这个错误:code.google.com/p/android/issues/detail?id=36062,如果你想要平滑滚动,这实际上是一个更好的解决方法:stackoverflow.com/questions/14479078/…
  • 如上所述,该错误似乎特定于smoothScrollToPositionFromTop。不确定它会影响smoothScrollToPosition...有人知道吗?
  • 不知道,但有时我的smoothScrollToPosition() 似乎不起作用,而 'setSelection()' 起作用;虽然有点混蛋。
【解决方案3】:

直接滚动:

getListView().setSelection(11);

为了平滑滚动:

getListView().smoothScrollToPosition(11);

滚动到顶部

getListView().setSelectionAfterHeaderView();

注意

尝试在 post 中调用它,因为有时在调用它的方法时尚未创建列表视图

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

【讨论】:

    【解决方案4】:

    你应该使用transcript mode:

    getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
    

    【讨论】:

    • 是的,这正是我一直在寻找的,这使得滚动即时!
    【解决方案5】:

    在被点击的列表项上设置一个监听器,然后在点击时使用View.getTop()View.getBottom() 来获取它在父项中的位置。然后您可以使用ListView.scrollTo(x, y) 滚动到列表项。

    【讨论】:

    • 这对我不起作用。如果我实现您的示例,则 listView 会滚动,但所选项目未居中。
    • @Anita:你没有说任何关于居中的事情......居中只需要一个小的修改。只需与屏幕高度成比例地增加或减少 y 值。
    • 没有必要这样做。
    【解决方案6】:

    你可以找找

    listView.setSelectionFromTop(position, distanceFromHeader);

    它将Item定位在listview顶部下方的指定像素位置

    【讨论】:

    • 我需要在滚动 lisview 的同时滚动另一个视图。在 listview 上使用 setSelectionFromTop 进行滚动会阻塞 UI 线程,这会使另一个视图的滚动变慢。可以给点建议吗?
    【解决方案7】:

    你可以使用

    smoothScrollToPosition(position)
    

    只要把item的位置加1,就可以看到item的view了。

    getListView().smoothScrollToPosition(position + 1);
    

    【讨论】:

      【解决方案8】:

      使用持续时间可以提供更好的用户体验。使用它,并添加持续时间。将项目顺利滚动到列表视图的顶部。

      int duration = 500;  //miliseconds
      int offset = 0;      //fromListTop
      
      listview.smoothScrollToPositionFromTop(position,offset,duration);
      
      • 缩短持续时间以加快滚动速度

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多