Cómo abrir el cajón de navegación sin barra de acción, abrir con sólo un botón
Tengo una barra de navegación sin ninguna barra de acción (no quiero una barra de acción). Estoy tratando de hacerlo para que tenga un botón que puede abrir el cajón de navegación.
Sé que hay un método llamado openDrawer para el DrawerLayout http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)
- Android: cómo saber si se mantiene pulsado el botón
- Haga clic en el botón de Android dos veces para recibir el evento de clic
- Creación de dos botones personalizados
- ¿Cómo evitar múltiples botones al mismo tiempo en android?
- Programaticamente cambiar drawableLeft de botón
No sabía cómo usarlo, pero he intentado hacer un botón cuando haga clic, ejecuta este método:
DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); mDrawerLayout.openDrawer(mDrawerLayout);
Cuando hago clic en él, me da una Java NullPointerException. Alguien tiene alguna idea?
EDIT: Este código está dentro de un fragmento, y estoy tratando de referir la disposición de cajón fuera del fragmento. He utilizado depurador, y está mostrando que mDrawlerLayout es NULL.
¿Algún consejo?
¡Gracias!
- Botón con fondo de 9 parches que no envuelve el contenido
- El botón indica con Background como AnimationDrawable en Android
- Android - haga clic en el botón de registro y tome medidas basadas en la selección de radio
- ¿Cómo agrego un botón a una clase "extends View"?
- Botón android no se puede hacer clic mientras se reproducen animaciones
- Botón "Atrás" en la barra de acción - Android. ¿Cómo ir "atrás"?
- Android cómo crear una ventana emergente
- ¿Cómo diseñar botones?
Es darle un puntero nulo porque está tratando de encontrar el diseño del cajón en la vista del fragmento, cuando está realmente en la vista de actividades.
Un hack rápido para hacer lo que quieres es encontrar la vista como:
getActivity().findViewById(R.id.drawer_layout)
Eso debería funcionar. Una mejor manera es tener un método sobre la actividad para abrir el cajón
public void openDrawer(){ mDrawerLayout.openDrawer(mDrawerLayout); }
En la actividad onCreate ejecuta tu findViewById:
mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
MDrawerLayout debe ser una variable miembro de su actividad.
Entonces en su fragmento usted puede llamar:
//cast activity to MyActivity so compiler doesn't complain ((MyActivity)getActivity()).openDrawer();
Una manera aún mejor de hacerlo es crear un oyente en el fragmento y establecer la actividad como un oyente para el fragmento. A continuación, puede llamar a un método sobre la actividad, similar a la anterior. Te dejaré hacer una investigación sobre cómo hacer eso.
drawerLayout.openDrawer(Gravity.START);
Gracias a @athor & @Ashish Tana.
Me tomó tanto tiempo para averiguar el error ( NullPointerException
) que estoy recibiendo.
El mío funciona de esta manera; En lugar de getView()
, uso getActivity()
y abrir el cajón por mDrawerLayout.openDrawer(Gravity.LEFT);
.
mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); final ImageButton btnOpenDrawer = (ImageButton) getView().findViewById(R.id.drawer_menu); btnOpenDrawer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mDrawerLayout.openDrawer(Gravity.LEFT); } });
Escribí una respuesta sobre esto aquí: https://stackoverflow.com/a/18199771/880349
//For me a better way in avoiding a `null pointer` in getting the DrawerLayout final DrawerLayout drawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Opens the Drawer drawer.openDrawer(Your View, Usually a ListView); } return false; });
Obtiene directamente el cajón actual dentro de una vista / fragmento para que no obtenga una NullPointerException
Funciona en el botón de clic
mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawer.openDrawer(GravityCompat.START); } });
- Cómo conectar el botón de encendido en Android?
- Obtenga la cadena de formato de fecha preferida del sistema Android