Основная деталь Используя ContentResolver.applyBatch ()?

Я задавался вопросом если его возможное для сохранения ведущего устройства и подробных записей к контент-провайдеру с помощью android.content. ContentResolver.applyBatch () метод в той же операции, где последующие объекты ContentProviderOperation в параметре поставщиков зависят от результата предыдущих объектов.

Проблема, которую я имею, состоит в том, что фактический Uri не известен в то время, когда ContentProviderOperation.newInsert (Uri), которым метод называют и Uri, неизменен.

То, что я придумал, показывают ниже:

Ведущее устройство Uri: content://com.foobar.masterdetail/master
Uri детали: content://com.foobar.masterdetail/master/#/detail

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
operations.add(ContentProviderOperation.newInsert(intent.getData())
    .withValue(Master.NAME, "")
    .withValue(Master.VALUE, "")
    .build());
operations.add(ContentProviderOperation.newInsert(intent.getData()
        .buildUpon()
        .appendPath("#") /* ACTUAL VALUE NOT KNOWN UNTIL MASTER ROW IS SAVED */
        .appendPath("detail")
        .build())
    .withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */)
    .withValue(Detail.NAME, "")
    .withValue(Detail.VALUE, "")
    .build());
ContentProviderResult[] results = this.getContentResolver().applyBatch(MasterDetail.AUTHORITY, operations);
for (ContentProviderResult result : results) {
    Uri test = result.uri;
}

В моем контент-провайдере я переопределяю applyBatch () метод для обертывания операции в транзакцию.

Это возможно или является там лучшим способом сделать это?

Спасибо.

21
задан Philipp Reichart 29 August 2011 в 00:01
поделиться