CursorAdapter.swapCursor第一次没有刷新

时间:2014-11-20 14:44:42

标签: android android-listview android-cursoradapter android-cursorloader

我有一个 ListActivity 并使用 CursorLoader 来加载存储在ContentProvider中的数据。我使用扩展 CursorAdapter 的自定义类来显示列表项。在LoaderCallbacks onLoadFinished 中,我有以下内容:

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

我有一个ListActivity的自定义布局,其中包含一个带android:id="@android:id/empty"的TextView。

问题在于,当我第一次打开应用程序时,即使在ContentProvider中显示数据,调用swapCursor也不会刷新ListView。当我向ListView添加新项目时,列表会正确刷新。但是,如果我注释掉TextView,它在没有可用数据时显示简单文本,则应用程序按预期工作。 swapCursor调用自动相应地更新ListView。

有关为什么会发生这种情况的想法,或者是否有正确的方法来执行此操作,因为我认为调用notifyDataSetChanged不会因为特定情况下的刷新失败而无法完成工作?

1 个答案:

答案 0 :(得分:2)

您遇到此问题是因为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. @onCreate call listView.setEmptyView(null) and swapCursor call

    listView.setEmptyView(findViewById(android.R.id.empty);
    
  4. 不确定所有这些,但其中一个人肯定会工作:)