android - recyclerview如何在onswipe删除数据后如何恢复数据。

查看:109
本文介绍了android - recyclerview如何在onswipe删除数据后如何恢复数据。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

onswipe中删除数据后如何恢复数据
1.

                final int position = viewHolder.getAdapterPosition();
                final thingsModel thing = adapter.getItem(position);
                //totalThing.removeThing(new thingsModel[]{thing});
                //storeThingDAO.deleteThing(sqLiteDatabase,thing.getKey());
                mList.remove(position);
                adapter.notifyItemRemoved(position);
                Snackbar.make(coordinatorLayout,R.string.back,Snackbar.LENGTH_SHORT)
                        .setAction("取消", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                mList.add(position,thing);
                                adapter.notifyItemInserted(position);
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        storeThingDAO.insertThing(sqLiteDatabase,thing);
                                    }
                                }).start();
                            }
                        }).show();
                if (!mList.contains(thing)){
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            storeThingDAO.deleteThing(sqLiteDatabase,thing.getKey());
                        }
                    }).start();
                }

我是在删除后,如果取消删除的操作,就将这个重新加回数据库中,我认为这个方法并不好,请问合理的解决方法是什么?
在生命周期中onstop中更新数据库的话,是将原表中的数据全部删除再将mlist的数据添加进去吗?

解决方案

就这个需求来说不需要对数据频繁的读写,你的mList初始化数据是从数据表一次性读取的吧,可以建一个tempList暂存被删除的条目数据,对tempList进行删除的条目数据的管理(有删除操作时添加数据,action取消时移除前面删除时添加的对应的数据),在确定不再需要对列表进行编辑时(比如Activity退出时)再把tempList对应数据库进行数据持久化操作,tempList不为空时即遍历tempList,对应的数据库表数据条目进行删除,这时使用数据库事务操作会很快,tempList为空时不进行任何操作,整个过程,其实就最多只是进行了两次数据库操作(mList的查询读取和tempList的元素映射表项删除),节省了性能开支,至于取消的Action,要方便你从tempList查找对应的条目数据,tempList用Map创建会更合适一些(如Map<position, thingsModel>)。数据库表可以对单个条目进行删除修改操作,不需要删表再重建,那样代价太大,删除数据一般情况下毕竟是小范围的。

这篇关于android - recyclerview如何在onswipe删除数据后如何恢复数据。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆