首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >长点击删除项目后Listview不自动刷新吗?

长点击删除项目后Listview不自动刷新吗?
EN

Stack Overflow用户
提问于 2017-08-24 00:34:53
回答 3查看 147关注 0票数 2

我使用自定义的SimpleCursorAdapter填充了listview。在listview的onItemClickListener上,它打开另一个活动,它的工作。现在,onitemLongClickListener我想要显示一个警告对话框,其中包含删除文件的是,否选项。选择yes后,我将获得光标和项目的相关数据库条目,并删除该条目并从应用程序数据目录中删除文件,但listview不会刷新,直到我关闭应用程序并重新打开它。在删除longclick listener中的文件和数据库条目后,我尝试使用adapter.changeCursor(光标),但没有成功。在删除文件和数据库条目后,我需要做什么才能使它立即刷新?

MainActivity:

代码语言:javascript
复制
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
            cursor = (Cursor) lv.getAdapter().getItem(position);
            filepath = cursor.getString(cursor.getColumnIndex("filename"));
            final File file = new File(filepath);
            builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Delete File");
            builder.setMessage("Are you sure you want to delete this file?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    boolean isDeleted = file.delete();
                    int count = db.delteSingleEntry(filepath);
                    if (isDeleted && count != 0){
                        Toast.makeText(MainActivity.this, "File deleted and Database entry removed", Toast.LENGTH_SHORT).show();

                    }else {
                        Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                }
            })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.cancel();
                        }
                    });

            AlertDialog alert = builder.create();
            alert.show();
            adapter.changeCursor(cursor);
            return false;
        }

    });

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-24 00:46:48

当底层数据发生变化时,您需要通知数据观察者和任何ui (如列表视图或循环视图)进行自我刷新,这可以通过使用BaseAdapter.notifydatasetchanged()方法来完成。

由于游标适配器是BaseAdapter的子类,因此您也可以对适配器使用此方法。

BaseAdapter documentation

票数 0
EN

Stack Overflow用户

发布于 2017-08-24 00:41:29

您需要调用:

代码语言:javascript
复制
yourAdapter.notifyDataSetChanged()

但为了获得更好的性能,请尝试使用Recyclerview实例

RecyclerView

票数 1
EN

Stack Overflow用户

发布于 2017-08-25 18:29:57

我把它修好了。我在delete语句之后调用了我的populatelistview()方法,它立即更新了listview。感谢所有人。

代码语言:javascript
复制
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
            cursor = (Cursor) lv.getAdapter().getItem(position);
            filepath = cursor.getString(cursor.getColumnIndex("filename"));
            final File file = new File(filepath);
            builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Delete File");
            builder.setMessage("Are you sure you want to delete this file?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    boolean isDeleted = file.delete();
                    int count = db.delteSingleEntry(filepath);
                    if (isDeleted && count != 0){
                        populateListview();    //I added this line and problem resolved.
                        Toast.makeText(MainActivity.this, "File deleted and Database entry removed", Toast.LENGTH_SHORT).show();

                    }else {
                        Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                }
            })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.cancel();
                        }
                    });

            AlertDialog alert = builder.create();
            alert.show();
            return true;
        }

    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45845103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档