有一个自定义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)。
非常感谢您的努力!