我有一个 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不会因为特定情况下的刷新失败而无法完成工作?
答案 0 :(得分:2)
您遇到此问题是因为ListActivity
会自动将空视图(如果有)设置为ListView
。
我建议你试试其中一个:
延长活动并在swapCursor
致电后
listView.setEmptyView(findViewById(android.R.id.empty);
使空视图消失:android:visibility="gone"
并在swapCursor
调用后
findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
@onCreate call listView.setEmptyView(null)
and swapCursor
call
listView.setEmptyView(findViewById(android.R.id.empty);
不确定所有这些,但其中一个人肯定会工作:)