确保在android listview上可见?

有没有办法可以确保Android列表视图中的给定项目完全可见?

我希望能够以编程方式滚动到特定项目,例如当我按下按钮时。

Solutions Collecting From Web of "确保在android listview上可见?"

ListView.setSelection()将滚动列表,以便所需的项目在视口中。

尝试一下:

 public static void ensureVisible(ListView listView, int pos) { if (listView == null) { return; } if(pos < 0 || pos >= listView.getCount()) { return; } int first = listView.getFirstVisiblePosition(); int last = listView.getLastVisiblePosition(); if (pos < first) { listView.setSelection(pos); return; } if (pos >= last) { listView.setSelection(1 + pos - (last - first)); return; } } 

我相信你要找的是ListView.setSelectionFromTop() (虽然我有点迟到了)。

最近我遇到了同样的问题,粘贴我的解决方案,以防万一有人需要它(我试图使整个最后一个可见的项目可见):

  if (mListView != null) { int firstVisible = mListView.getFirstVisiblePosition() - mListView.getHeaderViewsCount(); int lastVisible = mListView.getLastVisiblePosition() - mListView.getHeaderViewsCount(); View child = mListView.getChildAt(lastVisible - firstVisible); int offset = child.getTop() + child.getMeasuredHeight() - mListView.getMeasuredHeight(); if (offset > 0) { mListView.smoothScrollBy(offset, 200); } } 

我有一个更短的,在我看来,更好的解决方案:ListView requestChildRectangleOnScreen方法是为它设计的。

上面的答案确保将显示该项目,但有时它将部分显示(即,当它位于屏幕的底部时)。 下面的代码确保将显示整个项目,并且视图将仅滚动必要的区域:

  private void ensureVisible(ListView parent, View view) { Rect rect = new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()); parent.requestChildRectangleOnScreen(view, rect, false); }