Cómo crear un cajón de navegación suave
Estoy utilizando este ejemplo para el cajón de navegación. Al chascar encendido del artículo de la lista izquierda del cajón demuestra algunas imágenes pero el cajón se cierra no suavemente.
¿Qué debo hacer aquí para cerrar con facilidad el diseño del cajón izquierdo después de hacer clic en el elemento de listview.
- Incluyendo fila en la parte inferior del cajón de navegación
- No muestre la superposición con el Cajón de navegación de Android
- Cajón de navegación para cambiar las actividades en lugar de fragmentos
- Android: NavigationDrawer / múltiples actividades / mismo menú
- Múltiples actividades (no fragmentos) con un NavigationDrawer. ¿Cómo mostrar la actividad seleccionada actualmente?
- DrawerLayout se debe medir con MeasureSpec.EXACTLY error
- Cajón arrastrable con un asa (en lugar de barra de acción) encima de otras aplicaciones
- Lista plegable Elemento en la navegación Cajón
- Cómo agregar un grupo al cajón de navegación mediante programación
- El gaviota de navegación de Android no pasa onTouchEvent a la actividad
- Cómo crear un cajón de navegación sin biblioteca de soporte
- Cajón No se muestra el cajón de navegación de salida
- BaseActivity para la navegación
No estoy seguro de que esta es la mejor ruta, pero la forma en que resolvió esto fue crear un Runnable pendiente que se ejecuta en onDrawerClosed
. P.ej:
private void selectItem(final int position) { mPendingRunnable = new Runnable() { @Override public void run() { // update the main content by replacing fragments Fragment fragment = new PlanetFragment(); Bundle args = new Bundle(); args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); } }); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); setTitle(mPlanetTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // If mPendingRunnable is not null, then add to the message queue if (mPendingRunnable != null) { mHandler.post(mPendingRunnable); mPendingRunnable = null; } }
Funciona perfecto
private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { mDrawerLayout.closeDrawer(mDrawerList); mDrawerLayout.postDelayed(new Runnable() { @Override public void run() { selectItem(position); } }, 300); } }
No utilizo hilos, porque necesito actualizar la interfaz de usuario después de cerrar el menú de navegación.
El siguiente código funciona para mí.
Estoy utilizando fragmento como miembro variable de clase para actualizar ui
La función setFragment () utiliza para asignar la variable fragmento a fragmento
En evento onDrawerClosed (), actualizo ui.
mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { setFragment(position); } }); // for getting fragment protected void setFragment(int p) { fragment = null; switch (position) { case 1: fragment = new DashboardFragment(); break; } if (fragment != null) { mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(p); mDrawerLayout.closeDrawer(mDrawerList); } } // on close draw , fragment is loaded on screen public void onDrawerClosed(View view) { getSupportActionBar().setTitle(mTitle); invalidateOptionsMenu(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); }
Simplemente publicar el archivo drawerLayout.closeDrawer () en la cola de mensajes utilizando el controlador, con un retardo mínimo resuelto mi problema. Handler.postDelayed () es la clave aquí.
public void selectItem(int position) { switch (position) { case 0: DashboardFragment dashboardFragment = new DashboardFragment(); Bundle args = new Bundle(); args.putInt(dashboardFragment.ARG_SCREEN_NUMBER, position); dashboardFragment.setArguments(args); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.fragmentLayout, dashboardFragment, TAG_DASHBOARD); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); getSupportFragmentManager().executePendingTransactions(); break; default: break; } // Highlight the selected item, update the title, and close the drawer drawerList.setItemChecked(position, true); setTitle(mScreenTitles[position]); mPendingRunnable = new Runnable() { @Override public void run() { drawerLayout.closeDrawer(GravityCompat.START); } }; mHandler.postDelayed(mPendingRunnable,50); }