我试图从列表视图和sqlite数据库中删除项目。这个网站上有几个问题,但我找不到合适的解决方案。我的问题与设计有关。我的意思是:Android上的数据库访问应该以异步方式完成,以避免停止主线程。实际上,我当前的listview是使用android Loader 加载的,它通知了db上的任何操作并调用onContentChanged()
。问题是如何继续删除:最佳策略是什么?我看到两种方式:
notifyDataSetChanged()
,然后使用AsyncTask
(或类似)从db中删除。装载机将收到通知。在这种情况下,可能存在刷新问题,因为适配器由于加载程序更新而再次更新。答案 0 :(得分:1)
这两个选项都有效,但不同的人会选择不同的方式。第二种方式更简单,更推荐将Loader
开发的所有工作留给Google
。
doc表示会自动刷新数据,只需将回调作为onLoadFinished
和onLoadReset
即可完成:
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);
}
换句话说,我没有理由选择第一种方法,第二种方法是让生活更轻松。