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

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

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

Solutions Collecting From Web of "Обеспечить видимость в списке андроидов?"

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