studio recyclerview maestro detalle android

android - recyclerview - Dos preguntas sobre la plantilla de flujo maestro/detalle



maestro detalle android studio (6)

Acabo de echar un vistazo a la plantilla Master / Detail Flow y no puedo descifrar dos cosas.

1) ¿Por qué requiere la versión 11 de Android cuando el código que genera parece usar el soporte de compatibilidad de fragmentos? En particular, ¿por qué no puedes generar plantillas que funcionen con la versión 8 de Android? (por ejemplo, esta importación)

import android.support.v4.app.FragmentActivity;

2) ¿Cómo sabe la actividad principal si mostrar los detalles en una nueva actividad o en el panel de detalles si es lo suficientemente grande? Parece que lo hace a través de este código:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item_list); if (findViewById(R.id.item_detail_container) != null) { mTwoPane = true; ((ItemListFragment) getSupportFragmentManager() .findFragmentById(R.id.item_list)) .setActivateOnItemClick(true); } }

setContentView(R.layout.activity_item_list); establece el diseño en un ListFragment que solo establece su propio adaptador, pero no puedo ver cómo findViewById(R.id.item_detail_container) != null nunca volverá verdadero ya que parece que nunca se abre / infla.

¿Alguna pista?


Con respecto a la primera pregunta, una razón por la que requiere V11 es que usa list_content, y eso no está incluido en la biblioteca de compatibilidad. Una solución para eso está here .


Creo que la plantilla de flujo maestro / detalle requiere api nivel 11 porque usa la barra de acción. Trataré de usar esta plantilla con http://actionbarsherlock.com/ y veré si funciona con Android 2.2 o 2.3.


Después de mirar mucho, la respuesta es debido a esto en values-large/refs.xml

<resources> <item type="layout" name="activity_item_list">@layout/activity_item_twopane</item> </resources>

Redirige la solicitud del diseño normal a un diseño más grande (la versión de dos paneles) donde se define R.id.item_detail_container .

Esto es bastante confuso. No estoy seguro de por qué no solo llamaron el diseño grande igual que el diseño normal, sino que también tienen un xml diferente.


Esto es lo que funcionó para mí.

1) Agregue ActionBarSherlock al proyecto: Proyecto -> Propiedades -> Android -> Seleccione ActionBarSherlock y presione el botón "Agregar". Si no tiene ABS, bueno, debe obtenerlo en http://actionbarsherlock.com/ antes de continuar.

2) "AndroidManifest.xml": establece minSdkVersion en 10 (Gingerbread). Creo que puedes ir incluso más bajo que eso.

android:minSdkVersion="10"

3) "activity_item_list.xml": simplemente elimine "list_content", porque Eclipse sigue quejándose de que necesita Honeycomb o posterior.

tools:layout="@android:layout/list_content" <-- remove

4) "activity_item_twopane.xml": elimine las líneas Honeycomb o posteriores.

android:divider="?android:attr/dividerHorizontal" <-- remove tools:layout="@android:layout/list_content" <-- remove

5) ItemListActivity.java: Usa SherlockFragmentActivity.

//public class ItemListActivity extends FragmentActivity implements public class ItemListActivity extends SherlockFragmentActivity implements

6) ItemListFragment.java: modifique los parámetros a setListAdapter ().

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // TODO: replace with a real list adapter. //setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), // android.R.layout.simple_list_item_activated_1, // android.R.id.text1, DummyContent.ITEMS)); int layout = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) ? android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_checked; setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), layout, DummyContent.ITEMS)); }

7) "ItemDetailActivity.java": Use SherlockFragmentActivity y getSupportActionBar ().

//public class ItemDetailActivity extends FragmentActivity { public class ItemDetailActivity extends SherlockFragmentActivity { ... //getActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Después de hacer los cambios, la aplicación funcionó en Gingerbread, ICS y Jelly Bean.

__ sol


La técnica utilizada en la segunda parte de su pregunta es un ejemplo de un alias de diseño .


con respeto a su primera pregunta:

necesita un cambio en la clase ItemListFragment :

esta:

setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), R.layout.simple_list_item_activated_1, R.id.text1, DummyContent.ITEMS));

para esto:

setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), R.layout.simple_list_item_1, R.id.text1, DummyContent.ITEMS));

Y comenta en ItemDetailActivity esta línea:

// getActionBar().setDisplayHomeAsUpEnabled(true);