Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从listview和数据库中删除项_Android_Sqlite_Listview_Android Listview - Fatal编程技术网

Android 从listview和数据库中删除项

Android 从listview和数据库中删除项,android,sqlite,listview,android-listview,Android,Sqlite,Listview,Android Listview,我试图从listview和sqlite数据库中删除一个项目。这个网站上有几个问题,但我找不到合适的解决办法。我的问题与设计有关。我的意思是:Android上的数据库访问应该以异步方式完成,以避免停止主线程。实际上,我当前的listview是使用android加载程序加载的,它会通知db上的任何操作,并调用onContentChanged()。问题是如何进行删除:最佳策略是什么?我认为有两种方式: 从适配器中删除,在适配器上调用notifyDataSetChanged(),然后使用AsyncTas

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

  • 从适配器中删除,在适配器上调用
    notifyDataSetChanged()
    ,然后使用
    AsyncTask
    (或类似命令)从数据库中删除。装载机将收到通知。在这种情况下,可能会出现刷新问题,因为加载程序更新会再次更新适配器
  • 使用AsyncTask(或类似任务)删除该项,并使用加载程序等待更新。在这种情况下,问题是当用户删除项目时,UI没有更新,但它将在以后被删除(如果没有发生错误),因此从用户的角度来看,它可能有点奇怪

  • 这两种选择都会奏效,但不同的人会选择不同的方式。第二种方法更简单,建议您将所有工作交给
    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);
    }