Лучший способ "обновить" и "setSelection" после обновления ListView (Android) - PullRequest
2 голосов
/ 26 октября 2009

В моем ListView я выбираю пункт «Добавить избранное», и мне нужно выполнить какую-то работу, я снова заполняю данные, чтобы обновить список, затем я реализую OnScrollListener, используя setSelection(firstVisibleItem), чтобы установить отображение списка Право на Товар был добавлен.

Есть ли лучший способ сделать это. Я имею в виду, как mCursor.requery() или что-то подобное в Android API? Или какой-нибудь подсказать способ?

Ответы [ 5 ]

5 голосов
/ 13 сентября 2011

Для отображения выбранного элемента скорее в середине, чем в верхней части моего ListView, я использовал setSelectionFromTop():

getListView().setSelectionFromTop(pos, getListView().getHeight() / 2);

Конечно, вы можете дополнительно вычесть половину высоты расположения вашей ячейки из деления выше, чтобы получить выделение точно посередине.

1 голос
/ 20 июля 2015

Это то, что вы все ищете:

onResume()
{
    refresh_your_data()
    if(listview.getadapter()==null)
     // create the adapter
    }
    else
    {
        adapter.notifydatasetchanged();
    }
}
1 голос
/ 27 октября 2009

Если вы просто позвоните setSelection(), ваш элемент будет отображаться в неестественно . Например, если ваш элемент виден в «середине» экрана и его положение равно 8. Когда вы добавляете избранное , обновляете данные , setSelection (8) будет отображать элемент в верхней части экрана (точнее в середине).

Так вот почему я использую OnScrollListener, чтобы получить firstVisibleItem, и использую это значение для установки позиции. Это заставляет элемент отображаться естественно. Это функция:

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){}

Я думаю, что это часто случается со всеми, кто обновляет данные в ListView. И я надеюсь, что кто-то может поделиться опытом в этой проблеме.

1 голос
/ 28 февраля 2011
mListActivity.runOnUiThread(
    new Runnable() {
        public void run() {
            x.setSelection(x.getCount());
        } 
    } 
);
1 голос
/ 26 октября 2009

Ну, requery() - это предпочтительный способ заселения ListView, который поддерживается SimpleCursorAdapter. Вызов setSelection() на ListView кажется хорошим способом убедиться, что нужный элемент виден. Мне неясно, что OnScrollListener имеет отношение к этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...