¿Cómo evitar la recreación de fragmentos cuando se selecciona de NavigationDrawer?
Tengo una actividad simple en la que está alojado un cajón de navegación. Una de sus entradas es un WebView, que tiene mucho que cargar (muestra Gmail, de modo que después de todos esos desagradables redireccionamientos se necesita mucho).
Me gustaría conservar el fragmento incluso cuando se producen diferentes selecciones. Pensé que estas soluciones podrían funcionar. No lo hicieron.
- Android: OnClick para el encabezado del cajón de navegación no funciona
- Alternar el cajón de navegación 'abrir' en el botón / clic de imagen
- Pestañas de la barra de acción con ViewPager con el cajón de navegación
- ¿Por qué DrawerLayout a veces falla al abrirse?
- Cómo ocultar el indicador del cajón de navegación mientras utiliza appcompat21
1) No volver a crear el fragmento: incluso si mWebmailFragment realmente no es nulo , onCreateView () se llama en cualquier caso.
private Fragment mWebmailFragment /*, the others */; public void selectItem(int position) { Fragment fragment = null; switch (position) { case FRAGMENT_CODE_WEBMAIL: mWebmailFragment = mWebmailFragment!=null ? mWebmailFragment : new WebmailFragment(); fragment = mWebmailFragment; break; // ... }
2) si se llama a onCreateView (), el mantenimiento del estado del objeto WebView puede funcionar. Bueno, no: depuración descubrí que savedInstanceState siempre es nulo. No sé por qué.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); // Retain instance setRetainInstance(true); //.... // SavedState if (savedInstanceState != null) { mWebView.restoreState(savedInstanceState); } else { // do stuff } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mWebView.saveState(outState); }
- Quiero hacer menú de diapositivas con efecto 3D como la imagen de abajo
- Cambiar los elementos del cajón de navegación dentro del fragmento
- Manejar el botón de retroceso en un solo fragmento
- Cómo agregar un separador de sección para el cajón de navegación en Android?
- Cómo agregar barra de acción personalizada con el cajón de navegación?
- Cómo deslizar el ActionBar junto con el NavigationDrawer
- Cambiar elementos de NavigationView cuando el usuario está registrado
- Nuevo ActionBarDrawerToggle cuando se utiliza AppCompatActivity
Creo que no has usado ocultar / mostrar correctamente. En su fragmento de transacción use add () para cargar el fragmento en lugar de replace ().
Cambia esto
final FragmentManager myFragmentManger = myContext .getSupportFragmentManager(); final FragmentTransaction myFragmentTransaction = myFragmentManger .beginTransaction(); myFragmentTransaction.replace(R.id.content, aFragment, aFragmentTag.getFragment());
a
final FragmentManager myFragmentManger = myContext .getSupportFragmentManager(); final FragmentTransaction myFragmentTransaction = myFragmentManger .beginTransaction(); myFragmentTransaction.add(R.id.content, aFragment, aFragmentTag.getFragment());
Si utiliza replace, createview () de fragmento se llamará cada vez. Trate de usar el add () como el código anterior.
- Preapproval key en Android
- Cómo establecer adb – emulador de tiempo de espera desde la línea de comandos