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  
Viejo 12/09/13, 20:23:26
Avatar de varoo10
varoo10 varoo10 no está en línea
Usuario muy activo
Mensajes: 620
Compra y venta: (8)
 
Fecha de registro: jul 2011
Localización: Córdoba
Mensajes: 620
Modelo de smartphone: Samsung Galaxy Note 2
Versión de ROM: Emotion Note II v3.1 [XXDLL7] [4.1.2]
Tu operador: Yoigo
Mencionado: 8 comentarios
Tagged: 0 hilos
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);
	}
Utilizando Activities en vez de Fragments se solucionarían problemas cómo por ejemplo escalabrarte la cabeza a la hora de utilizar botones o un error que me acaba de ocurrir que és que la actividad principal se me queda de fondo y al entrar a un fragment lógicamente no se ve bien.
Responder Con Cita


  #2  
Viejo 12/09/13, 20:37:01
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
  #3  
Viejo 12/09/13, 20:38:54
Avatar de varoo10
varoo10 varoo10 no está en línea
Usuario muy activo
Mensajes: 620
Compra y venta: (8)
 
Fecha de registro: jul 2011
Localización: Córdoba
Mensajes: 620
Modelo de smartphone: Samsung Galaxy Note 2
Versión de ROM: Emotion Note II v3.1 [XXDLL7] [4.1.2]
Tu operador: Yoigo
Mencionado: 8 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
  #4  
Viejo 12/09/13, 21:01:54
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 16:18:26 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007