Fragmentos y onConfigurationChanged

Estoy tratando de hacer algo que hago con las actividades, pero dentro de un fragmento. Lo que hago es usar actividades:

Primera parada la actividad se reinicia al girar el dispositivo android:configChanges="keyboardHidden|orientation|screenSize"

En mi actividad añadir:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.main); } 

Así que la actividad no se reinicia, sino recargando el main.xml, para usar el layout-land

Ahora tengo una actividad que muestra viewpager, que contiene tres fragmentos. Todo funciona correctamente. La detección de la rotación está en los fragmentos

 public class FRG_map_web extends Fragment { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.i("myLogs", "Rotation"); } 

El problema es que el fragmento no utiliza setContentView (R.layout.main); Este es el código:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.frg.myFragment, null); 

Traté de usar:

 LayoutInflater inflater = inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.frg.myFragment, null); ... LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.frg.myFragment, null); ... LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); view = inflater.inflate(R.layout.frg.myFragment, null); ... LayoutInflater li = LayoutInflater.from(context); 

Y diferentes maneras, pero siempre sin éxito no puedo inflar correctamente.

¿Puede alguien decirme cómo tengo que hacer?

Gracias de antemano, agradezco la ayuda

Saludos

Si entiendo correctamente, no desea que el fragmento se vuelva a cargar en cada rotación. En su lugar, desea reenviar las vistas y actualizarlas con la información que ya tiene.

 public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Get a layout inflater (inflater from getActivity() or getSupportActivity() works as well) LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View newView = inflater.inflate(R.layout.frg.myFragment, null); // This just inflates the view but doesn't add it to any thing. // You need to add it to the root view of the fragment ViewGroup rootView = (ViewGroup) getView(); // Remove all the existing views from the root view. // This is also a good place to recycle any resources you won't need anymore rootView.removeAllViews(); rootView.addView(newView); // Viola, you have the new view setup } 

De acuerdo con la documentación ( getView () ), getView () devuelve la misma vista que devolvió de su onCreateView () pero no lo hace. Realmente devuelve al padre de la vista que has regresado en onCreateView (), que es exactamente lo que necesitas. GetView () devolverá una instancia de NoSaveStateFrameLayout, que se utiliza específicamente para Fragmentos como su vista raíz.

Espero que esto ayude.

¿Ha considerado retener sus instancias de fragmentos? Vea Fragmento # setRetainInstance .

Permita que su actividad sea recreada (no especifique android: configChanges) pero retenga sus instancias de fragmento a través de los cambios de orientación. Si todo el trabajo pesado ocurre en Fragment # onCreate esto debería funcionar bien. OnCreate () no se volverá a llamar, ya que el fragmento no se vuelve a crear.

Podría hacerlo re-adjuntando el fragmento dentro deConfigurationChanged:

  @Override public void onConfigurationChanged(Configuration newConfig) { getActivity().detachFragment(this); super.onConfigurationChanged(newConfig); .... getActivity().attachFragment(this); } 

Recuerde que al separar y adjuntar su fragmento sólo estará trabajando con su vista. Pero el estado del fragmento se "guarda" en el administrador de fragmentos.

Tal vez usted puede intentar usar

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.frg.myFragment, container, false); } 

. En cualquier caso, el fragmento todavía tiene que ser destruido y recreado, ¿por qué no dejar que Android lo maneje automáticamente reiniciando la actividad? Si hay algún dato que guardar, puede guardarlo en onSavedInstanceState() . Configurar android:configChanges="keyboardHidden|orientation|screenSize" no se recomienda en Android.

  • ¿Cómo funciona el método getView () al crear su propio adaptador personalizado?
  • "Evite pasar null como la raíz de vista" advertencia al inflar vista para su uso por AlertDialog
  • ¿Cómo inflar otro diseño dentro de getView () del adaptador gridview en android?
  • Ver Gone cuando se hace clic fuera de esa vista
  • Android: ¿Cómo cambiar dinámicamente el contenido de la pestaña inflada?
  • App fallando al usar fragmentos
  • NPE mientras infla el diseño (Intentar invocar el método virtual 'boolean java.lang.String.equals (java.lang.Object)' en una referencia de objeto nulo)
  • La diferencia entre LayoutInflater.inflate y findViewById
  • LayoutInflater.Factory onCreateView no se llama con 22.1+ biblioteca de soporte
  • Cómo evitar que los elementos se dupliquen cuando se desplaza la vista de reciclador
  • Cómo obtener información de una ventana emergente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.