android - 在其适配器上使用 changeCursor() 后,ListView 不会刷新

标签 android cursor android-listview android-fragments android-cursoradapter

我正在使用一个数据库,并且有一个使用游标适配器的列表 fragment ,我通过在加载程序中查询数据库来获得它。 当用户长按 ListView 项时,他会看到上下文菜单和删除该条目的选项。 当他按下 delete 键时,我启动了一个删除该条目的线程,然后再次启动加载程序以获取新游标(因为不推荐使用“requery()”)。 当加载程序完成加载新光标时,我尝试使用 changeCursor 方法来刷新 ListView ,但它没有这样做,所以我尝试使用 notifyDataSetChanged 但它也不起作用。 我已经检查过,光标从加载器返回,它确实改变了光标,但 ListView 没有刷新。

我该怎么办?重启 fragment ?

这是一些代码:

case MENU_REMOVE:
            final AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
            mProgress = ProgressDialog.show(getActivity(), getString(R.string.list_remove_progress_title_text),
                    getString(R.string.progress_dialog_description));
            new Thread(new Runnable() {

                @Override
                public void run() {
                    PlacesHandler wph = new PlacesHandler(getActivity());
                    wph.DeleteEntry(mPlaceName, info.id);
                    getLoaderManager().initLoader(0, null, ListFragment.this);
                }
            }).start();
            return(true);

加载完成时:

@Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        if(mProgress == null || !mProgress.isShowing()){
            ...
        }
        else{
            mProgress.dismiss();
            mAdapter.changeCursor(data);
            mAdapter.notifyDataSetChanged();
        }
    }

谢谢!

最佳答案

谢谢大家,但我发现了我的问题! 从加载程序返回的游标与适配器中的游标相同。 这是因为我调用了:

getLoaderManager().initLoader(0, null, this);

代替:

getLoaderManager().restartLoader(0, null, this);

因此,因为在创建 fragment 时第一次加载游标时,我已经使用了 ID 为 0 的加载程序,所以它立即将游标返回给我。 所以如果有人遇到同样的问题并阅读它,只知道 initLoader 使用一个现有的具有指定 ID 的加载器(如果有的话)。如果没有,它会创建一个。 但是如果你想丢弃加载器的旧数据并重新开始,你应该使用 restartLoader

再次感谢所有试图提供帮助的人!

关于android - 在其适配器上使用 changeCursor() 后,ListView 不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268511/

相关文章:

java - AmazonSQSClientBuilder.defaultClient() java.lang.NoSuchFieldError : No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier

java - 为什么 setCursor() 不起作用?

c++ - 在任何地方绘制一个类似系统的光标,最顶层

javascript - 如何制作不阻止链接的 CSS 元素

java - 不将数字选择器十进制整数传递给新 Activity

java - 关于无参数 doa 定义的 Android Room 的 gradle 异常

android - 以编程方式安装 android apk 已禁用安装按钮

android - 帮助解决 Android UI ListView 问题

android - 带有 EmptyView nullPointerException 的 SwipeRefreshLayout

java - 使用数组适配器将对象的多个值分配给 ListView 中的单个项目