有没有办法可以确保Android列表视图中的某个项目完全可见?
我希望能够以编程方式滚动到特定项目,例如按下按钮时。
答案 0 :(得分:20)
ListView.setSelection()
将滚动列表,以便所需的项目在视口中。
答案 1 :(得分:11)
试一试:
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;
}
}
答案 2 :(得分:5)
我相信你所寻找的是ListView.setSelectionFromTop()(虽然我在聚会上有点迟了)。
答案 3 :(得分:3)
最近我遇到了同样的问题,在这里粘贴我的解决方案以防有人需要它(我试图使整个最后一个可见项目可见):
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);
}
}
答案 4 :(得分:2)
我有一个更短的,在我看来,更好的解决方案: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);
}