Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Fragmento sin una vista se bloquea en el cambio de configuración

Tengo una interfaz de usuario donde necesito un Fragment para mostrarse (con una vista) en modo horizontal pero no en modo vertical. En el modo de retrato todavía debe estar disponible pero mostrará su resultado usando ListPopupWindow en ListPopupWindow lugar.

Pensé que podría manejar esto usando la etiqueta de <fragment /> para la disposición del paisaje mientras que creaba el fragmento programmatically si no fue comenzado (en el caso cuando estamos en retrato).

  • Android: Acciones múltiples en una vista de lista - problema de enfoque
  • Firebase Android Authentication failed: expired_token (El token Auth ha caducado)
  • Android: checkbox listener
  • ¿Por qué el flujo oauth2 nativo de Google requiere secreto de cliente?
  • ¿Cómo puedo determinar si mi aplicación Android tiene pérdida de memoria?
  • Mostrar barra de pestañas y listIn Actionbar al mismo tiempo. (Android Honeycomb)
  • Esto funciona bien siempre y cuando empiece en el paisaje, si inicia en el retrato donde se crea el fragmento por programación, su aplicación se bloqueará cuando gire el emulador cuando intente adjuntar el fragmento a su diseño:

    Java.lang.IllegalStateException: Fragmento no creó una vista. En android.app.Activity.onCreateView (Activity.java:4095)

    Los documentos para Fragment.isInLayout() parece sugerir que debería ser capaz de manejar de esta manera:

    Devuelve true si el diseño se incluye como parte de una jerarquía de vista de actividad a través de la etiqueta. Esto siempre será cierto cuando se crean fragmentos a través de la etiqueta, excepto en el caso en que un fragmento antiguo se restaure de un estado anterior y no aparezca en el diseño del estado actual.

    Así que la pregunta es cómo hacerlo correctamente o si hay algo que me falta?

    ACTUALIZAR:

    Parece que isInLayout() no se está comportando como debería actualmente también. Devuelve false si ha agregado un Fragment a un contenedor manualmente.

    Además, si agrega un Fragment manualmente a un contenedor y luego gira (el dispositivo) a un diseño que no contenga ese diseño, se bloqueará:

    Causado por: java.lang.IllegalArgumentException: No se encontró ninguna vista para id 0x7f060011 para el fragmento SearchFragment {4042f868 # 2 id = 0x7f060011 SearchFragment} en android.app.FragmentManagerImpl.moveToState (FragmentManager.java:722)

  • Hacer que Preferencia parezca deshabilitada, pero sigue registrando clics
  • Apóstrofe no precedido por \
  • Android ViewPager findViewById no funciona - siempre devuelve null
  • Cómo crear un diálogo personalizado con esquinas redondeadas en android
  • Depuración de una aplicación WebView (Ionic) en Android mediante logcat
  • Cómo incluir la vista de título personalizado con en AlertDialog en android?
  • 2 Solutions collect form web for “Fragmento sin una vista se bloquea en el cambio de configuración”

    ¿Has encontrado una respuesta a esto? Yo estaba teniendo un problema similar, y logró llegar a una solución. Usted puede hacer fácilmente lo que está intentando de la siguiente manera:

    Cree dos diseños diferentes uno en el directorio de diseño, uno en el directorio de layout-land. La que se encuentra en el directorio de la disposición-tierra se utilizará en modo horizontal. Como un marcador de posición, donde desea que su fragmento de ir, utilice el elemento FrameLayout s, e id, diga con el id "my_fragment". El diseño en el directorio de diseño no debe contener ningún elemento con ese id.

    En su método onCreate, use findViewById (R.id.my_fragment) para localizar el marcador de posición de fragmento. Si existe, estás en modo horizontal y deberías añadir tu fragmento (si no existe ya): add (R.id.my_fragment, new MyFragment, "myFragment). Si obtienes nulo, estás en modo retrato y deberías No crear el fragmento.

    Tenga mucho cuidado de no reemplazar nunca un fragmento creado mediante una etiqueta, con uno que cree dinámicamente en su programa. Un fragmento para el cual isInLayout devuelve true es una bestia completamente diferente, aquella para la cual devuelve false. Sus ciclos de vida son completamente diferentes. Reemplazar uno con el otro conducirá al temido IllegalStateException "Fragmento no creó una vista" problema.

    Blake

    Su problema también puede deberse a que no tiene un diseño lanscape para el fragmento que está utilizando. Es posible que tenga uno para el retrato y por lo que su programa funciona bien, pero cuando se gira el dispositivo, el sistema operativo probablemente busca la vista en la carpeta de paisaje y no encuentra la vista para que se declare como falta. Compruebe que tiene la vista tanto en la carpeta "layout" y "layout-land".

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.