Cómo puedo declarar un fragmento como oculto en un diseño XML
Mi actividad declara todos sus fragmentos de GUI en un solo diseño XML. Sólo necesita mostrar algunos de los fragmentos en el momento del lanzamiento; El resto se muestran cuando el usuario interactúa con la aplicación. Una parte del diseño es la siguiente:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment android:id="@+id/map_panel" android:name="com.example.MapPanel" android:layout_width="match_parent" android:layout_height="@dimen/map_panel_height" /> <fragment android:id="@+id/list_panel" android:name="com.example.ListPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/map_panel" /> <fragment android:id="@+id/detail_panel" android:name="com.example.DetailPanel" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/map_panel" android:visibility="gone" />
Mi intención es que el fragmento list_panel
sea visible en el arranque, y el fragmento detail_panel
se oculte hasta que el usuario seleccione algo de la lista.
- Android: Cómo acceder a la carpeta de recursos de otra aplicación de Android
- Recurso de cadena duplicado en strings.xml android
- Dimens.xml en la carpeta de valores de 7 "y 10" tableta, ¿cómo?
- Cómo especificar la carpeta lib para JARs cuando se utiliza un archivo de generación de hormigas generado por Android?
- Android Studio AndroidManifest.xml vs build.gradle
De forma predeterminada, un fragmento empieza con el atributo isHidden
como false. Eso significa que mi actividad tiene que iterar a través de los fragmentos cargados y llamar manualmente isHidden(true)
en fragmentos como detail_panel
al inicio.
Preferiría declarar el estado isHidden
en el diseño XML. Sin embargo, la configuración de android:visibility="gone"
en una declaración <fragment>
no cambia el estado isHidden
, y no puedo encontrar ninguna documentación sobre otro atributo que haría el truco.
¿Es posible establecer un atributo XML en un <fragment>
para hacer que se oculte?
Nota: No me preocupa la visibilidad de la vista, me preocupa el valor de fragment.isHidden()
. Esto afecta a cómo FragmentManager manipula la pila trasera y realiza animaciones. Si llama a transaction.show(fragment)
en un fragmento cuya vista es invisible o desaparecida, pero el valor de fragment.isHidden()
es falso, entonces el FragmentManager no hará que la vista sea visible. Consulte http://developer.android.com/reference/android/app/Fragment.html#isHidden () como referencia.
- Utilice símbolo especial (<,>) en diseño de diseño en Android
- ¿Cómo puedo referenciar algo en el archivo /values/strings.xml programatically?
- Agregar varias vistas personalizadas al diseño mediante programación
- Balloon in Chatting Aplicación para Android
- Android: El editor XML predeterminado ya no se abre
- No se encontró ningún identificador de recurso para el atributo 'layout_behavior' en el paquete
- Cómo cargar el archivo xml del animador en Android programatically?
- Cómo ver los archivos xml extraídos en android?
Me enfrenté a una situación similar, donde tuve que esconder un fragmento.
Simplemente incluí el fragmento dentro de un LinearLayout y marcó el diseño para ser visible / ido.
<LinearLayout android:id="@+id/map_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="visible" > <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment" /> </LinearLayout>
Esta respuesta es un poco tarde pensó que puede ser útil para futuras referencias. La visibilidad es parte de la clase Ver – Fragmento extiende el objeto aunque no tiene acceso a los valores de visibilidad. Una posibilidad es hacer que el fragmento sea un niño de un FrameLayout y llamando invisible o desaparecido en el diseño. Esto hará que el fragmento parezca estar oculto.
¡Espero eso ayude!
Basado en el post de Jyo, utilice esto:
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.hide(mFragment); fragmentTransaction.commit();
Esto ha funcionado para mí en el nivel 23 de la API. 'MFragment' es el fragmento que desea ocultar.
Tenemos el método isVisible para el fragmento que seeting visibilty a Gone no toma ningún espacio Donde como Invisble toma el espacio real de la visión.
public void showHideFrgament(final Fragment fragment){ FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); if (fragment.isHidden()) { ft.show(fragment); Log.d("hidden","Show"); } else { ft.hide(fragment); Log.d("Shown","Hide"); } ft.commit(); }
- Xamarin.Forms ListView OutOfMemoryError excepción en Android
- El emulador de Visual Studio para Android está atascado en "OS is starting …", sólo en API Level 23 / Android 6