Android LoaderCallbacks记录删除的实现

Android LoaderCallbacks记录删除的实现,android,android-contentprovider,android-loadermanager,Android,Android Contentprovider,Android Loadermanager,有一个自定义ContentProvider,用于对设备上的SQLite进行数据访问。在视图中,我实现了LoaderCallbacks。每个视图都使用一个数据库行,方法是在视图实现LoaderManager.LoaderCallbacks的onCreateLoader方法中绑定到一个URI,并附加记录id URI/id 假设屏幕上有3个视图,每个视图代表数据库中的一行。现在,后台同步进程通过调用ContentProvider URI/ID的delete方法删除一行。该行将在ContentProvi

有一个自定义ContentProvider,用于对设备上的SQLite进行数据访问。在视图中,我实现了LoaderCallbacks。每个视图都使用一个数据库行,方法是在视图实现LoaderManager.LoaderCallbacks的onCreateLoader方法中绑定到一个URI,并附加记录id URI/id

假设屏幕上有3个视图,每个视图代表数据库中的一行。现在,后台同步进程通过调用ContentProvider URI/ID的delete方法删除一行。该行将在ContentProvider的delete方法中从数据库中删除,并触发具有正确ID的对应视图的onLoadFinished回调,得到一个getCount=0的光标,因为该行已不存在

第一个问题: 这是否已经错了,此时应该有一个onLoaderReset回调

如果对Q1是:

ContentProvider delete方法对SQLite中的一个ID执行删除操作:

deletedRows = db.delete("table", "_id="+uri_id, selectionArgs);
然后调用notifyChange并返回已删除的行数:

getContext().getContentResolver().notifyChange(uri, null);
return deletedRows;
那么,如何实现这一点以获取在此过程中调用的onLoaderReset回调呢?目前还不叫它

如果对Q1为否,第二个问题: 如果该行不再存在,我希望从UI中删除该视图。这样做有什么不对吗

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {  
  if( cursor.getCount() > 0){
    cursor.moveToFirst();
    //Populate elements with cursors data
  }else{
    //remove this view completely
  } 
}
我不确定这是否是一种好的做法,因为在本例中,删除行的触发器是一个空游标,这是最好的方法吗

顺便说一下,我不能使用技术列表视图,我需要使用URI/ID将单个视图框架布局绑定到它们的数据


非常感谢你的努力

因此,将ListView与。在getView方法中返回视图的适配器FrameLayouts FrameLayouts应该足够灵活,以便不仅在ListView中使用它们,还能够检测何时不再需要它们自己,而不仅仅是因为重新呈现而被父ListView删除。这是您不能使用ListView的原因吗?