¿Cómo puedo evitar que onCreateView () de un fragmento sea llamado?

Así que aquí está mi código. 'CurrentFragment' es simplemente un campo que rastrea lo que se está mostrando actualmente. Esto es en una clase que sí mismo es un fragmento (así que tengo un fragmento que muestra un fragmento).

private void selectNavBarItem(NavbarItem v) { Fragment fragmentToUse = null; if (v == setpointsNavItem) { fragmentToUse = setpointsFragment; } else if (v == rapidSetupNavItem) { fragmentToUse = rapidSetupFragment; } else if (v == outdoorResetNavItem) { fragmentToUse = outdoorResetFragment; } else if (v == rampDelayNavItem) { fragmentToUse = rampDelayFragment; } if (fragmentToUse != null) { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); if (currentFragment != null) { ft.detach(currentFragment); } currentFragment = fragmentToUse; if (currentFragment.isDetached()) { ft.attach(currentFragment); } else { ft.add(R.id.setup_content_holder, currentFragment); } ft.addToBackStack(null); ft.commit(); } 

Todo se ve genial, pero las vistas se están recreando para todos los fragmentos (onCreateView () y onViewCreated ()). Tenía la esperanza de que adjuntar y desprender funcionaría, pero no lo hace. La razón por la que quiero mantener la vista es que las selecciones del usuario todavía están allí cuando navegan de nuevo.

Otra opción es mostrar y ocultar, pero no sé cómo hacer que funcione porque el fragmento que posee este código tiene un FrameLayout (R.id.setup_content_holder) que contiene el fragmento que quiero añadir, y no puedo simplemente Agrega cuatro fragmentos a ella pero ocultar tres de ellos. Hay una opción para agregar un fragmento sin contenedor, pero no tengo ni idea de cómo se supone que funciona.

Entonces, ¿alguna idea?

Pruebe esto, esto resolverá su problema de creación de r-creación de frág.

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mFragmentView != null) { ((ViewGroup) mFragmentView.getParent()).removeView(mFragmentView); return mFragmentView; } mFragmentView = inflater.inflate(R.layout.home_fragment, container, false); ..... // your remaining code } 

Los métodos de OnCreateView siempre se llaman dentro de un fragmento.

Para resolver el problema que está describiendo lo que realmente necesita hacer es guardar el estado del fragmento, entonces cuando se devuelve la aplicación se restaurará lo que guardó.

Por ejemplo (dentro de la clase de fragmentos en cuestión):

 @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceStatePutString("userString", someTextView.getText().toString()); savedInstanceStatePutInt("userInt", userInt); // etc... } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); someTextView.setText(savedInstanceState.getString("userString")); userInt = savedInstanceState.getInt("userInt"); } 

Eso debería resolver tu problema mientras saltas entre fragmentos; La aplicación llamará onSaveInstanceState y onRestoreInstanceState cuando un fragmento es empujado o extraído de la pila.

¡No los salvará para siempre, sin embargo! Si necesita más almacenamiento persistente, busque otras opciones como guardar en una base de datos sqlite.

OP aquí.

Así que hackeé algo aquí, y me pregunto si es una buena idea. Tengo un fragmento que sostiene una vista. La Vista contiene todo lo que quiero guardar (en el corto plazo, por supuesto – esto no se supone que sea más persistente que la RAM). Cuando el fragmento invoca onCreateView () simplemente devuelvo la vista ya creada.

Ahora, encontré un problema en el que el Administrador de fragmentos no estaba eliminando la Vista. He añadido una llamada en onPause () para asegurarse de que se ha eliminado de los padres.

Todo parece funcionar bien, pero quiero asegurarme de que no estoy haciendo algo realmente malo. Sé que Android realmente quiere administrar sus propios ciclos de visión, pero no quiero recrearlos cada maldita vez. Son complicados y no quiero lidiar con la reinicialización de todo el texto de subview / imagen / estado. ¿Se me ocurrirán problemas en mi intento de ejecutar un procedimiento operativo normal de Android?

EDIT: olvidó el código:

 public class OutdoorResetFragment extends Fragment { private OutdoorResetView view; public OutdoorResetFragment() { } public void onAttach(Activity activity) { if (view == null || view.getContext() != activity) { view = new OutdoorResetView(activity); } super.onAttach(activity); } public void onPause() { super.onPause(); ViewGroup container = (ViewGroup) view.getParent(); if (container != null) { container.removeAllViews(); } } @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { return view; } public OutdoorResetView getView() { return view; } } 
  • ¿Cómo funciona Choreographer?
  • Utilización de `onRetainCustomNonConfigurationInstance` para conservar los datos a través de los cambios de configuración
  • Android Studio - "Android framework se detecta en el proyecto"
  • Construyendo módulos Android separados con dexpreopt deshabilitado
  • ¿Cómo obtienen los dispositivos Android las claves públicas de los desarrolladores?
  • Agregar un proyecto de android como una biblioteca en la aplicación AOSP
  • Obtener el nombre del paquete y las firmas de uid / pid de la aplicación en el cliente nativo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.