首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在适配器中应用notifyDataSetChanges()方法?

如何在适配器中应用notifyDataSetChanges()方法?
EN

Stack Overflow用户
提问于 2018-08-04 02:43:06
回答 1查看 42关注 0票数 -1

我正在使用带有自定义适配器扩展RecyclerView.Adapter类的回收器视图

我在适配器类的onBindViewHolder()方法中编写了一个弹出窗口,弹出窗口包含两个项目,编辑和删除都工作得很好,但问题是当我从回收视图中删除一个项目时,我必须关闭应用程序并再次运行它,才能看到它已经被删除。我想在不退出应用程序的情况下查看更改,我试图在适配器内使用notifyDataSetChanged(),但它不起作用,我该如何解决这个问题??

下面是我在OnBindViewHolder中的代码

代码语言:javascript
复制
holder.dotsOptions.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        PopupMenu popup = new PopupMenu(ctx, holder.dotsOptions);
        //Inflating the Popup using xml file
        popup.getMenuInflater().inflate(R.menu.dots_menu, popup.getMenu());
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                if(item.getItemId()==R.id.edit){

                }
                else if(item.getItemId()==R.id.delete){
                    AlertDialog.Builder builder=new AlertDialog.Builder(ctx);
                    builder.setTitle("Are you sure to delete:");
                    builder.setMessage(holder.contactDisplayName.getText().toString());
                    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {


                            Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(contactInfo[1]));
                            Cursor cur = ctx.getContentResolver().query(contactUri, null, null, null, null);
                            try {
                                if (cur.moveToFirst()) {
                                    do {
                                        if (cur.getString(cur.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)).equalsIgnoreCase(contactInfo[0])) {
                                            String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
                                            Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
                                            ctx.getContentResolver().delete(uri, null, null);

                                        }

                                    } while (cur.moveToNext());
                                    notifyDataSetChanged();

                                }

                            } catch (Exception e) {
                                System.out.println(e.getStackTrace());
                            } finally {
                                cur.close();


                            }


                        }
                    });
                    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

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

                return false;
            }
        });
        popup.show();

    }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 02:52:05

notifyDataSetChanged()之前调用yourList.remove(item)。这就是全部!

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

https://stackoverflow.com/questions/51678438

复制
相关文章

相似问题

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