很抱歉提出愚蠢的问题,但这困扰着我。
我有两个活动,可以说活动A和活动B。
活动A使用CursorLoader
从数据库中获取内容,该内容从我自己的ContentProvider
鉴于活动B提供了显示和编辑此数据的功能。
我有内容uri content://com.android.todo.database.RCMProvider/app_userdata
下面是我在ContentProvider中的查询方法
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = MyDatabaseHelper.getReadableDatabase();
String tableName = getTableName(uri);
Cursor cursor = db.query(tableName, projection, selection, selectionArgs, null, null, null);
if (cursor != null) {
cursor.setNotificationUri(getContext().getContentResolver(), uri);
}
return cursor;
}
ContentProvider
中的插入方法为
@Override
public Uri insert(Uri uri, ContentValues values) {
String tableName = getTableName(uri);
SQLiteDatabase db = MyDatabaseHelper.getReadableDatabase();
long id = db.insert(tableName, null, values);
if (id > 0) {
Uri itemUri = ContentUris.withAppendedId(uri, id);
getContext().getContentResolver().notifyChange(itemUri, null);
return itemUri;
}
throw new SQLException(
"Problem while inserting into uri: " + uri);
}
我正在使用CursorLoader
从数据库中获取数据。
我在两个活动中都按以下方式注册CursorLoader
。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
loaderManager = LoaderManager.getInstance(this);
loaderManager.initLoader(LOADER_ID, null, this);
}
因此,当我在ActivityB
中编辑数据时,我会得到即时回调
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor)
中的ActivityB
。 CursorLoader
的预期行为。
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor)
中没有发生ActivityA
的{{1}}回调,
这是ActivityB
的行为,还是我错过了什么。对于任何数据插入,我都希望同时更新两个活动。请引导我朝正确的方向。
编辑1
我正在CursorLoader