从列表视图和数据库中删除项目

时间:2015-05-03 07:44:18

标签: android sqlite listview android-listview

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

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

1 个答案:

答案 0 :(得分:1)

这两个选项都有效,但不同的人会选择不同的方式。第二种方式更简单,更推荐将Loader开发的所有工作留给Googledoc表示会自动刷新数据,只需将回调作为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);
}

&#34;清洁&#34;重置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);
}

换句话说,我没有理由选择第一种方法,第二种方法是让生活更轻松。