确保在android listview上可见?

时间:2010-01-01 15:54:13

标签: android listview listactivity

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

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

5 个答案:

答案 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);
}