LoaderCallbacks实现记录删除

时间:2014-01-14 12:47:08

标签: android android-contentprovider android-loadermanager

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

因此我们假设屏幕上有3个视图,每个视图“代表”数据库中的一行。现在,后台同步进程通过调用ContentProvider的删除方法(URI / ID)来删除行。在ContentProvider的delete方法中从数据库中删除该行,并触发具有正确ID的相应View的onLoadFinished回调,获取带有getCount()= 0的游标​​,因为该行不再存在。

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

如果是,那么:

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绑定到其数据的单个视图(FrameLayouts)。

非常感谢您的努力!

0 个答案:

没有答案