ListView с пользовательским адаптером прокручивается вниз при первом перезапуске загрузчика

Я столкнулся со странной проблемой здесь.

В моем приложении пользователь должен перезагрузить загрузчик после обновления некоторых настроек onLoadFinished, все хорошо здесь, дело в том, что я поставил mAdapter.notifyDataSetChanged(); он прокручивается до самого конца списка.

Странная часть в том, что это происходит только один раз, при первом перезапуске загрузчика. Все остальное время вид остается именно там, где он есть.

Я уведомляю об изменении в потоке пользовательского интерфейса...

getLoaderManager().initLoader(EXISTING_EVAL_LOADER, null, ViewActivity.this);
runOnUiThread(new Runnable() {
    public void run() {
        mAdapter.notifyDataSetChanged();
    }
});

Если я не позвоню notifyDataSetChanged(); приложение вылетает только при нажатии элемента списка, и я получаю:

java.lang.IllegalStateException: содержимое адаптера изменилось, но ListView не получил уведомление. Убедитесь, что содержимое вашего адаптера не изменено из фонового потока, а только из потока пользовательского интерфейса. Убедитесь, что ваш адаптер вызывает notifyDataSetChanged() при изменении его содержимого.

2 ответа

Я думаю, что ваш listView является CHOICE_MODE_SINGLE и последний элемент выбран в listView и поэтому listView прокручивает к выбору.

если вам не нужно выбирать элементы на listView использовать этот:

listView.setChoiceMode(ListView.CHOICE_MODE_NONE)

или в xml: android:choiceMode="none"

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

listView.clearChoices();
listView.setAdapter(listView.getAdapter());

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

listView.setSelectionAfterHeaderView();

или же

listView.setSelection(0);

Я бы предложил

if (cursor.getCount() > 0) {
    cursor.moveToPosition(-1);
    while (cursor.moveToNext()) {
          <do stuff>
    }
}

cursor.close();
Другие вопросы по тегам