Android 从listview和数据库中删除项
我试图从listview和sqlite数据库中删除一个项目。这个网站上有几个问题,但我找不到合适的解决办法。我的问题与设计有关。我的意思是:Android上的数据库访问应该以异步方式完成,以避免停止主线程。实际上,我当前的listview是使用android加载程序加载的,它会通知db上的任何操作,并调用Android 从listview和数据库中删除项,android,sqlite,listview,android-listview,Android,Sqlite,Listview,Android Listview,我试图从listview和sqlite数据库中删除一个项目。这个网站上有几个问题,但我找不到合适的解决办法。我的问题与设计有关。我的意思是:Android上的数据库访问应该以异步方式完成,以避免停止主线程。实际上,我当前的listview是使用android加载程序加载的,它会通知db上的任何操作,并调用onContentChanged()。问题是如何进行删除:最佳策略是什么?我认为有两种方式: 从适配器中删除,在适配器上调用notifyDataSetChanged(),然后使用AsyncTas
onContentChanged()
。问题是如何进行删除:最佳策略是什么?我认为有两种方式:
notifyDataSetChanged()
,然后使用AsyncTask
(或类似命令)从数据库中删除。装载机将收到通知。在这种情况下,可能会出现刷新问题,因为加载程序更新会再次更新适配器这两种选择都会奏效,但不同的人会选择不同的方式。第二种方法更简单,建议您将所有工作交给
Loader
,由Google
开发。
所述it将自动刷新数据,只需使用回调函数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);
}
换句话说,我看不出有任何理由选择第一种方法,而第二种方法会让生活变得更轻松。我知道,但在这种情况下,正如我所说,当用户按下删除按钮时,该项目不会被删除,但会在稍后被删除,因此可能有点奇怪。对不起,你说的“未删除”是什么意思?延迟删除?这是处理用户输入和程序逻辑的方法,
Loader
将只在数据库中发生更改时重新加载,而不是之前。删除时显示对话框等待(如果要删除的数据非常大)。好的,您是说,要“覆盖”可能的延迟,请使用对话框或类似的方法。它可以工作,谢谢:)对话框的情况下,不让用户按下所有按钮混乱在同一时间。如果确实需要“延迟”,那么可以使用或TimerTask
或处理程序
或其他方法。干杯:)
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);
}