studio recyclerview maestro detalle detail android android-contentprovider

android - recyclerview - ¿Maestro-detalle usando ContentResolver.applyBatch()?



master detail android (1)

Cada resultado producido a partir de un elemento en la matriz de operaciones se identifica por su índice en la matriz. Las operaciones subsiguientes pueden hacer referencia a esos resultados mediante el método withValueBackReference ().

.withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */)

se convierte en

.withValueBackReference(Detail.MASTER_ID, 0)

Un ejemplo completo de este uso se puede encontrar en el ContactManager de muestra . El 0 es el índice de ContentProviderOperation a partir del cual se obtiene el valor.

Me preguntaba si es posible guardar registros maestros y detallados en un proveedor de contenido utilizando el método android.content.ContentResolver.applyBatch () en la misma operación en la que los elementos posteriores de ContentProviderOperation en el parámetro proveedores dependen del resultado de los elementos anteriores.

El problema que tengo es que el Uri real no se conoce en el momento en que se llama al método ContentProviderOperation.newInsert (Uri) y el Uri es inmutable.

Lo que he encontrado se muestra a continuación:

Maestro Uri: contenido: //com.foobar.masterdetail/master
Detalle Uri: contenido: //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; }

En mi proveedor de contenido, estoy anulando el método applyBatch () para envolver la operación en una transacción.

¿Es esto posible o hay una mejor manera de hacerlo?

Gracias.