Подтвердить что ты не робот

Обеспечить видимость в списке андроидов?

Есть ли способ, которым я могу сделать вывод, что данный элемент в списке андроидов полностью виден?

Я хотел бы иметь возможность программно прокручиваться до определенного элемента, например, когда я нажимаю кнопку, например.

4b9b3361

Ответ 1

ListView.setSelection() будет прокручивать список, чтобы нужный элемент находился в области просмотра.

Ответ 2

Попробуйте:

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;
    }
}

Ответ 3

Я считаю, что вы ищете ListView.setSelectionFromTop() (хотя я немного опаздываю на вечеринку).

Ответ 4

Недавно я встретил ту же проблему, вставьте мое решение здесь, если кому-то это понадобится (я пытался сделать весь видимый видимый элемент видимым):

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

Ответ 5

У меня есть более короткое и, на мой взгляд, лучшее решение для этого: 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);
}