Navegación Cajón de contenedores múltiples y mejores prácticas

Soy relativamente nuevo en el desarrollo de la interfaz de usuario de Android. Así que necesito la ayuda de desarrolladores más experimentados.
Estoy creando mi aplicación con el Navigation Drawer , he enfrentado con un montón de problemas.
En primer lugar, aquí está el código de ejemplo para el cajón de navegación.

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"/> </android.support.v4.widget.DrawerLayout> 

Este es un ejemplo sencillo del sitio oficial.

La vista de contenido principal (el FrameLayout anterior) debe ser el primer hijo en el DrawerLayout porque el orden XML implica z-ordering y el cajón debe estar encima del contenido.

En este ejemplo hay dos vistas anidadas: FrameLayout como se mencionó anteriormente para almacenar el contenido principal y ListView para representar el menú NavigationDrawer .

Asi que aqui están mis preguntas.

  1. La aplicación Real no tiene una sola vista en toda la actividad. Sobre todo Actividad tiene una gran cantidad de vista diferente, y varios fragmentos para hacer interfaz de usuario más sensible y proporcionar UX usuario mejor. Mis actividades son, por supuesto, diferentes puntos de vista y fragmentos (¿cuál es el propósito de las mismas actividades? :)). Una actividad tiene sólo un fragmento, otro tiene varios fragmentos, por lo que son todos diferentes … En el ejemplo de código anterior hay SOLO UN contenedor FrameLayout para la celebración de Fragmento sólo un fragmento, lo que tengo que hacer si mi actividad tiene dos, tres o Más fragmentos ?? ¿Cuál es la mejor solución en este caso.
  2. Como he descrito mi aplicación tiene múltiples actividades, por lo que mi cajón de navegación tiene que ser (de acuerdo a las prácticas de la interfaz de usuario de Android) en cada actividad para permitir que el usuario navega hasta los elementos de nivel superior de la aplicación. En este caso, es mejor tener una BaseActivity (he leído las respuestas aquí en stackoverflow) que mantendrá todas las cosas de configuración para NavigationDrawer . Pero en la medida en que el cajón de navegación requiere DrawerLayout en el diseño XML de la actividad, BaseActivity debería llamar setContentView método setContentView . Y todas las actividades heredadas de BaseActivity deben hacer algunos trucos para establecer su propio diseño, o no tiene sentido anular este método, ya que romperá toda la lógica. ¿Qué hacer en este caso?
  3. ¿Cuál es la manera más eficiente de crear una lista de cajones de navegación personalizada como en google + o YouTube sin utilizar una jerarquía de vista complicada que hace que la GPU funcione duro y puede traer mala experiencia al usuario

Para el segundo problema tengo algunas ideas de cómo puedo resolver esto, pero no sé es la forma correcta y qué enfoque es mejor.
La primera idea es implementar el patrón TemplateMethod. Crear método en BaseActivity algo como setupCustomViewGroup() y anularlo en todas las actividades inflar deseado viewgroup de xml y devolverlo de este método y que utilizarlo en inflar toda la vista.

O bien añadir explícitamente vista a la actividad, utilice combinar e incluir etiqueta.

Pero otra vez esto puede ser útil solamente para la actividad entera o un fragmento, qué hacer si tenemos más fragmentos, utiliza fragmentos anidados, pienso que es mala idea.

Además, mi objetivo es optimizar la jerarquía de la vista para que sea rápida y eficiente con el fin de llevar la suavidad, incluso en los dispositivos antiguos.

Estaré muy agradecido por cualquier persona que pueda describir o sugerir la forma más eficiente y correcta de seguir en este caso para que la interfaz de usuario responda y sea legible por el código.

Gracias.

1) Migrar de NavigationDrawer a SlideMenu (disponible en github).

2) Asegúrese de que su BaseActivity no tiene diseño en absoluto.

3) Inflar su elemento de vista de lista a través de ArrayAdapter.

Espero que sea de ayuda.

Solución:

1. Puedo pensar 2 casos aquí:

  1. Múltiples Fragmentos, Actividad Única: En este caso, la mejor manera es replace fragmentos en FrameLayout content_frame mientras cambia entre fragmentos. El contenido del navigation drawer sigue siendo el mismo para ellos
  2. Múltiples Fragmentos, Actividades Múltiples: En este caso, debe definir el diseño del contenido del navigation drawer diferente y utilizarlos con la setHasOptionsMenu(true) al cambiar de actividad.

2. Si está utilizando ListView como el navigation drawer entonces usted puede alcanzar fácilmente su trabajo poblando dinámicamente la row de ListView . Evite sobrepasar BaseActivity tanto como sea posible para este escenario. Si no está utilizando ListView como contenido del navigation drawer , puede definir un diseño diferente para diferentes actividades tal como se escribió en el punto 1

3. Creo que la aplicación de Google+ utiliza ListView como el navigation drawer de navigation drawer de su diseño custom . Depende de la necesidad de su aplicación, o bien puede ir con List o puede crear diseños personalizados simple para su aplicación

Espero que mi solución solucione sus dudas en alguna medida

Puedes usar fragmentos y llamarlos de la mainActivity así:

 MainActivity.java public class MainActivity extends Activity { .. .. @Override protected void onCreate(Bundle savedInstanceState) { .. mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); } /** * Slide menu item click listener * */ private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // display view for selected nav drawer item displayView(position); } } /** * Diplaying fragment view for selected nav drawer list item * */ private void displayView(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 0: fragment = new HomeFragment(); break; case 1: fragment = new FindPeopleFragment(); break; case 2: fragment = new PhotosFragment(); break; case 3: fragment = new CommunityFragment(); break; case 4: fragment = new PagesFragment(); break; case 5: fragment = new WhatsHotFragment(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { // error in creating fragment Log.e("MainActivity", "Error in creating fragment"); } } 

}

Echa un vistazo a este tutorial, puede ayudarte más

  • Android: ¿Es mejor crear un nuevo fragmento cada vez que se hace clic en un elemento del cajón de navegación o cargar fragmentos creados anteriormente?
  • InflateException en la llamada al método inflater.inflate ()
  • Reemplazar el diseño de la barra de herramientas de acuerdo con el fragmento visualizado
  • Cambiar fragmento con el cajón de navegación de Android Studio predeterminado
  • Cómo crear un subnivel en el menú de navegación en android?
  • Cómo ocultar el indicador del cajón de navegación mientras utiliza appcompat21
  • Lista de gavetas de navegaciónProblemas de selección en android 2.3
  • Android: OnClick para el encabezado del cajón de navegación no funciona
  • Cajón de navegación debajo de la barra de herramientas
  • Cambiar los elementos del cajón de navegación dentro del fragmento
  • Android.widget.RelativeLayout no se puede convertir en android.support.v7.widget.RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.