|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
|
Herramientas |
#1
|
||||
|
||||
Utilizar activities en Navigation Drawer
Estoy cansado de buscar así que vengo a preguntar por aquí a ver si me lo resuelven.
Bueno ahora mismo estoy empezando una aplicación en la que quiero utilizar Navigation Drawer. Resulta que sólo he conseguido que funcione con fragments siguiendo un tutorial y éste sería mi código. Código:
public class MainActivity extends ActionBarActivity { private String[] opcionesMenu; private DrawerLayout drawerLayout; private ListView drawerList; private ActionBarDrawerToggle drawerToggle; private CharSequence tituloSeccion; private CharSequence tituloApp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); opcionesMenu = new String[] {"Opción 1", "Opción 2", "Opción 3"}; drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerList = (ListView) findViewById(R.id.left_drawer); drawerList.setAdapter(new ArrayAdapter<String>( getSupportActionBar().getThemedContext(), android.R.layout.simple_list_item_1, opcionesMenu)); drawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = null; switch (position) { case 0: fragment = new Fragment1(); break; case 1: fragment = new Fragment2(); break; case 2: fragment = new Fragment3(); break; } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); drawerList.setItemChecked(position, true); tituloSeccion = opcionesMenu[position]; getSupportActionBar().setTitle(tituloSeccion); drawerLayout.closeDrawer(drawerList); } }); tituloSeccion = getTitle(); tituloApp = getTitle(); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) { getSupportActionBar().setTitle(tituloSeccion); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } public void onDrawerOpened(View drawerView) { getSupportActionBar().setTitle(tituloApp); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } }; drawerLayout.setDrawerListener(drawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); }
__________________
|
|
#2
|
||||
|
||||
Si puedes, poniendo un NavigationDrawer en cada Activity.
De todas formas si tienes problemas con Fragments es simplemente por no saber usarlos. Yo uso SlidingPaneLayout con Fragments y no tengo ningún problema. Si el "escalabrarte la cabeza" es por tener un botón en la Activity que se tiene que comunicar con el Fragment (o viceversa), desde la Activity puedes acceder al Fragment mediante el propio objeto del Fragment, y desde el Fragment a la Actvity mediante "getActivity()" (y casteando después) La programación con Fragments cuando la controlas te ahorra mucho tiempo, yo he tenido casos de usar el mismo Fragment para 2 Activities distintas con ViewPager que uno de los elementos del ViewPager era el mismo Fragment pero el resto eran distintos. |
#3
|
||||
|
||||
A ver yo se que se puede poner navigation en cada activity, lo que no sé en el código como enlazar navigation drawer con otras activities.
__________________
|
#4
|
||||
|
||||
Pues en el onItemClick en vez de inicializar un Fragment, inicializas un Intent. Y al final del todo en vez de reemplazar el Fragment haces un "startActivity". Ya para rematar puedes hacer un "finish". Así el usuario cuando le de atrás no volverá al Activity anterior, y tendrá la sensación de que simplemente ha estado cambiando el contenido.
Eso si, pierdes el efecto de al seleccionar un nuevo elemento ver como cambia y después se cierra el Navigation Drawer. Además de ser un proceso más lento que simplemente cambiar el Fragment. También deberías de desactivar las animaciones de entrada y salida de la Activity, para que el impacto al usuario sea menor: overridePendingTransition(0,0); //Entre el startActivity y el finish |
Estás aquí | ||||||
|