【问题标题】:CursorAdapter.swapCursor not refreshing the first timeCursorAdapter.swapCursor 第一次没有刷新
【发布时间】:2014-11-20 14:44:42
【问题描述】:

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

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

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

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

任何关于为什么会发生这种情况的想法,或者是否有适当的方法可以做到这一点,因为我相信调用 notifyDataSetChanged 不会完成这项工作,因为在非常特殊的情况下刷新失败?

【问题讨论】:

  • 如果不再使用旧光标,您应该使用changeCursor

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


【解决方案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. @onCreate 调用listView.setEmptyView(null)swapCursor 之后调用

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

不确定所有这些,但其中一个肯定会起作用:)

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多