Pregunta

Hola, estoy trabajando con un buscapersonas y fragmentos. Me gustaría anular los cambios de orientación para que el método OnCreateView no se ejecute cada vez que cambia la orientación. Esto se debe a que se ejecuta mucho en OnCreateview para mi aplicación, lo que hace que la orientación sea lenta para cambiar. Además, las cosas en mi servidor están marcadas y lo que no también, por lo que realmente no hay razón para que todo se ejecute solo porque la orientación cambió.

Esto es lo que he configurado hasta ahora

Tengo esto en la MainActivity en el manifiesto

 android:configChanges="orientation|keyboardHidden"

Y luego estoy usando esto en mi fragmento

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false);
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show();
}

Cuando ejecuto la orientación de la aplicación y el interruptor, veo que la tostada se muestra, pero el diseño nunca cambia al paisaje. Así que decidí que tal vez Android simplemente no estaba reconociendo que estaba en el paisaje ya que lo anulé, pero cambiar el diseño a algo ridículo como un diseño para un diálogo no causa una fuerza cerca o cualquier cosa que permanezca el diseño del retrato que se estira Como resultado, sé que hay algo malo en cómo estoy inflando el diseño.

Cualquier ayuda para cambiar el diseño cuando se cambia la orientación en un ViewPager sería muy apreciada.

¡Gracias!

¿Fue útil?

Solución

1) Debe colocar todas las rutinas de verificación de su servidor y otras operaciones únicas en fragment onCreate (), no onCreateView (). Si necesita mostrar algún tipo de pantalla de "carga ..." mientras se carga, le recomendaría usar un Fragmentidad para inflar un diseño con al menos un Framelayout Eso contiene un tipo de gráfico "Carga ...". Primero, la FragmentActivity ejecutará OnCreate (), en la que inflará primero la vista inicial y luego instanciará el fragmento. Coloque el código de verificación del servidor en el inCreate () del fragmento y luego infla cualquier vista para este fragmento en el método itcreateView (). Aquí hay una muestra de uno de mis proyectos que inicializa un botón de micrófono, que es realmente un fragmento:

<FrameLayout
       android:id="@+id/recorder_mic_fragment"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

Luego, el fragmento de micrófono en realidad está instanciado por el siguiente código Java:

// make the Mic button
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction xact = fragMgr.beginTransaction();
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) {
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit();
}

Frag_tag es en realidad un nombre de etiqueta único que le das a una instancia de fragmento que es diferente del r.id del fragmento. De esta manera, puede usar FindFragmentByTag () para asegurarse de que los fragmentos se instanciaran correctamente en todos los lugares a los que necesita.

Puede masajear un poco este código si está buscando cargar fragmentos dentro de fragmentos, como cómo funciona realmente mi aplicación. Si tiene un fragmento que inflará una de varias vistas posibles, use una instrucción IF para elegir el ID de cuadro apropiado y designar un Frag_Tag único. Aconsejaría usar distintos r.id para cada framelayout que cree para un fragmento. (Por ejemplo, si este fragmento podría inflar diferentes vistas de información, zumbido y letra, entonces mis nombres de etiquetas para cada fragmento de micrófono serían Meta meta, Cazón, y LetrasmicButton. También necesitaría elegir entre R.id.Meta_Mic_Button_frame y así sucesivamente.)

2) Cuando cambia entre los modos de retrato y paisaje, debe definir diferentes diseños XML en las carpetas Res/Diseño y Res/Layout_land. (O puede hacer res/diseño y res/diseño_port si desea considerar que el modo de paisaje es el valor predeterminado). Consulte este enlace: http://developer.android.com/guide/topics/resources/providing-resources.html#ternativeResources Puede definir diferentes diseños según el tamaño de la pantalla, el idioma, el modo de muelle, el modo nocturno y cualquier combinación de los mismos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top