Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Dos preguntas sobre la plantilla de flujo maestro / detallado

Acabo de echar un vistazo a la plantilla de Master / Flow de detalle y no puedo entender 2 cosas.

1) ¿Por qué requiere Android versión 11 cuando el código que genera parece utilizar el soporte de compatibilidad Fragment? En particular, ¿por qué no puede generar plantillas que se ejecutan fuera de Android versión 8? (Por ejemplo, esta importación)

import android.support.v4.app.FragmentActivity; 

2) ¿Cómo sabe la Actividad principal si desea mostrar los detalles en una nueva Actividad o en el panel de detalles si es lo suficientemente grande? Parece hacerlo 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 sólo establece su propio adaptador, pero no puedo ver cómo findViewById(R.id.item_detail_container) != null nunca volverá verdadero, ya que nunca parece ser abierto / inflado.

¿Alguna pista?

  • Android Robotium NoClassDefFoundError
  • INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
  • Manejo de eventos táctiles en SurfaceView sobre Maps API v2
  • Ejemplo de servicio bind / unbind (android)
  • Objetivo de la cámara no funciona con Samsung Galaxy S3
  • Cómo utilizar viewGroup en android
  • Android: ¿Cómo podemos backport withEndAction a versiones anteriores, con ayuda de Nueve Androides Antiguos
  • Android Studio agrega un permiso no deseado después de ejecutar la aplicación en un dispositivo real
  • 6 Solutions collect form web for “Dos preguntas sobre la plantilla de flujo maestro / detallado”

    Después de mucho buscar, 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> 

    Redirecciona la solicitud para el 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 ofuscado. No estoy seguro de por qué no sólo llaman a la disposición grande el mismo que el diseño normal, pero luego tienen diferentes xml.

    Esto es lo que funcionó para mí.

    1) Agregue ActionBarSherlock al proyecto: Proyecto -> Propiedades -> Android -> Seleccione ActionBarSherlock y pulse el botón "Agregar". Si usted no tiene ABS, bien, usted necesita conseguirlo de http://actionbarsherlock.com/ antes de continuar.

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

     android:minSdkVersion="10" 

    3) "activity_item_list.xml": Basta con eliminar "list_content", porque Eclipse se queja de que necesita Honeycomb o más tarde.

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

    4) "activity_item_twopane.xml": Elimina las líneas Honeycomb-or-later.

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

    5) ItemListActivity.java: Utilice SherlockFragmentActivity.

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

    6) ItemListFragment.java: Modifica 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": Utilice SherlockFragmentActivity y getSupportActionBar ().

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

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

    Solitario

    Con respeto en su primera pregunta:

    Usted necesita el 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); 

    Creo que la plantilla de flujo maestro / detalle requiere api nivel 11 porque utiliza la barra de acción. Voy a tratar de usar esta plantilla con ActionBarSherlcock y ver si funciona con androide 2.2 o 2.3.

    En cuanto a la primera pregunta, una de las razones que requiere V11 es que está utilizando list_content, y eso no está incluido en la biblioteca de compatibilidad. Un trabajo por ahí está aquí .

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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.