同一Uri上的多个CursorLoader

时间:2018-08-02 05:26:30

标签: android android-contentprovider android-cursorloader

很抱歉提出愚蠢的问题,但这困扰着我。

我有两个活动,可以说活动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)中的ActivityBCursorLoader的预期行为。

public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor)中没有发生ActivityA的{​​{1}}回调,

这是ActivityB的行为,还是我错过了什么。对于任何数据插入,我都希望同时更新两个活动。请引导我朝正确的方向。

编辑1

我正在CursorLoader

中使用此实现

0 个答案:

没有答案