gpt4 book ai didi

android - 从 ListView 和数据库中删除项目

转载 作者:行者123 更新时间:2023-11-29 01:33:24 24 4
gpt4 key购买 nike

我正在尝试从 ListView 和 sqlite 数据库中删除一个项目。这个网站上有几个问题,但我找不到合适的解决方案。我的问题与设计有关。我的意思是:Android 上的数据库访问应该以异步方式完成,以避免停止主线程。实际上,我当前的 ListView 是使用 android Loader 加载的,它会通知数据库上的任何操作并调用 onContentChanged()。问题是如何进行删除:什么是最好的策略?我看到两种方式:

  1. 从适配器中删除,对其调用 notifyDataSetChanged(),然后使用 AsyncTask(或类似的)从数据库中删除。 Loader 将被通知。在这种情况下,可能存在刷新问题,因为适配器因加载程序更新而再次更新。
  2. 使用 AsyncTask(或类似的)删除项目并使用 Loader 等待更新。在这种情况下,问题是当用户删除项目时 UI 没有更新,但它稍后会被删除(如果没有发生错误),所以从用户的角度来看可能有点奇怪。

最佳答案

这两个选项都可以,但不同的人会选择不同的方式。就您将所有工作留给 Google 开发的 Loader 而言,第二种方式更简单也更值得推荐。doc说它会自动刷新数据,只需要使用回调作为 onLoadFinishedonLoadReset 来完成它:

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.swapCursor(data);
}

Loader 被重置时“清理”适配器:

public void onLoaderReset(Loader<Cursor> loader) {
// This is called when the last Cursor provided to onLoadFinished()
// above is about to be closed. We need to make sure we are no
// longer using it.
mAdapter.swapCursor(null);
}

换句话说,我看不出有任何理由选择第一种方法,因为第二种方法能让生活更轻松。

关于android - 从 ListView 和数据库中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com