Android;sql数据库:关于删除数据库数据无法刷新listview并且新listview的修改增加功能出现bug的问题

出现的问题描述:

在我的数据库中有数据,利用adapter与数据库关联,再利用adapter和listview关联从而显示,我添加里增加数据和修改数据的 方法一切正常,但是在写入删除数据(长按删除,点击修改)的方法后出现了bug。第一次可以删除对应数据,之后的修改和删除均出现故障,如修改数据无法对应所选数据,或无法删除对应数据。

问题出现的原因:

经过几天的逐步排除,首先排除了list.remove()方法的执行失败,之后排除了数据库database.delete()方法执行失败没有删除对应数据的问题。之后又排除了adapter.notifysetdatachange()方法的执行失败,我利用了重新关联数据库数据和adapter的关系仍然没有解决此问题故而排除。最后发现原因:数据库的排序方式和适配器不同。

举个例子:我数据库中添加了 A B C D四条数据,其_id是1 2 3 4.在我使用遍历方法创建adapter的时候,适配器中 A B C D四条数据的position是 0 1 2 3.在listview.setonclicklistener()方法中获得的positon指的是adapter中数据的位置,使用list.remove方法删除listview中的数据,然后使用adapter.notifysetdatachange方法刷新适配器。这时会出现问题。假如我用了database.dlete方法删除了数据库中的B数据,则list.view中显示A C D,数据库中数据是A _ C D,_id 为1 2 3 4.注意B数据删除后_id为2的地方有一个空数据,其余C D的_id并不会自动减1.适配器中数据为 A C D  position为0 1 2.若此时有新的操作,例如修改C ,我通过position获得的位置在我原来看来等于数据库中_id-1,现在删除C操作获得的position为1而数据库中C数据的_id为3,无法对应,此时运用database.updata的修改的数据将会是原来的B数据位置的_id=2的数据。这就出现了问题。


解决方法

在适配器遍历数据进入list时,直接将_id信息写入list,然后用list.get方法直接获取_id 然后执行delete方法就可以准确的实行。我一开始不用是因为我没有将_id信息写进去,没办法获取id然后直接只用position来代替。

for (Event event : events) {
            HashMap<String, String> map = new HashMap<>();
            map.put("_id", String.valueOf(event._id));
            map.put("content", event.content);
            list.add(map);
        }//向list中写入数据

.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值