Есть ли способ, которым я могу сделать вывод, что данный элемент в списке андроидов полностью виден?
Я хотел бы иметь возможность программно прокручиваться до определенного элемента, например, когда я нажимаю кнопку, например.
Есть ли способ, которым я могу сделать вывод, что данный элемент в списке андроидов полностью виден?
Я хотел бы иметь возможность программно прокручиваться до определенного элемента, например, когда я нажимаю кнопку, например.
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);
}