2

У меня есть ListActivity и использовать CursorLoader, чтобы загрузить данные, которые хранятся в ContentProvider. Я использую собственный класс, расширяющий CursorAdapter для отображения элементов списка. В LoaderCallbacks onLoadFinished я следующее:CursorAdapter.swapCursor не освежает в первый раз

public void onLoadFinished(Loader<Cursor> loader, Cursor newCursor) { 
    cursorAdapter.swapCursor(newCursor); 
} 

У меня есть пользовательский макет для ListActivity, который включает в себя TextView с android:id="@android:id/empty".

Проблема заключается в том, что при первом открытии приложения вызов swapCursor не обновляет ListView, даже несмотря на то, что в ContentProvider есть данные. Когда я добавляю новый элемент в ListView, список обновляется должным образом. Однако, если я прокомментирую TextView, который отображает простой текст, когда данные недоступны, приложение работает так, как ожидалось. При вызове swapCursor автоматически соответственно обновляет ListView.

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

+0

Вы должны использовать 'changeCursor' если старый курсор больше не используется , – Simas

ответ

1

У вас возникла эта проблема, потому что ListActivity автоматически устанавливает пустой вид (если доступен) на ваш ListView.

Я предлагаю вам попробовать один из них:

  1. Продлить активность и после вызова swapCursor

    listView.setEmptyView(findViewById(android.R.id.empty); 
    
  2. Сделать пустой вид пошел: android:visibility="gone" и после swapCursor вызова

    findViewById(android.R.id.empty).setVisibility(View.VISIBLE); 
    
  3. @onC reate вызов listView.setEmptyView(null) и после swapCursor вызова

    listView.setEmptyView(findViewById(android.R.id.empty); 
    

Не уверен, что все из них, но один из эм, безусловно, работать :)

Смежные вопросы