Android CursorAdapter.swapCursor第一次不刷新
我有一个列表活动,并使用游标加载程序加载存储在ContentProvider中的数据。我使用一个自定义类扩展CursorAdapter来显示列表项。在LoaderCallbacks onLoadFinished中,我有以下内容:Android CursorAdapter.swapCursor第一次不刷新,android,android-listview,android-cursoradapter,android-cursorloader,Android,Android Listview,Android Cursoradapter,Android Cursorloader,我有一个列表活动,并使用游标加载程序加载存储在ContentProvider中的数据。我使用一个自定义类扩展CursorAdapter来显示列表项。在LoaderCallbacks onLoadFinished中,我有以下内容: public void onLoadFinished(加载器加载器,游标newCursor){ 游标适配器.swapCursor(新游标); } 我有一个ListActivity的自定义布局,其中包括一个带有android:id=“@android:id/empty”
public void onLoadFinished(加载器加载器,游标newCursor){
游标适配器.swapCursor(新游标);
}
我有一个ListActivity的自定义布局,其中包括一个带有android:id=“@android:id/empty”
的文本视图
问题是,当我第一次打开应用程序时,调用swapCursor
不会刷新ListView,即使ContentProvider中有数据要显示。当我向ListView添加一个新项目时,列表会正确刷新。但是,如果我注释掉TextView,它在没有可用数据时显示一个简单的文本,则应用程序会按预期工作。swapCursor调用会自动相应地更新ListView
有没有想过为什么会发生这种情况,或者是否有一种正确的方法可以做到这一点,因为我相信调用notifyDataSetChanged不会起作用,因为在非常特殊的情况下刷新失败?您遇到了这个问题,因为
ListActivity
会自动将空视图(如果可用)设置为ListView
我建议您尝试以下其中一种:
swapCursor
调用后执行
listView.setEmptyView(findViewById(android.R.id.empty);
android:visibility=“消失”
和之后的swapCursor
调用
findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
listView.setEmptyView(findViewById(android.R.id.empty);
listView.setEmptyView(null)
和swapCursor
调用之后
findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
listView.setEmptyView(findViewById(android.R.id.empty);
不确定所有这些,但其中一个肯定会起作用:)如果旧光标不再使用,您应该使用
changeCursor
。