programacion - Android: mostrar/ocultar fragmento deja un área vacía
manual de android en pdf (1)
Un mes después descubrí cómo hacerlo. Resulta que simplemente ocultar el fragmento no es suficiente, básicamente necesito ocultar / mostrar el caparazón que contiene el fragmento. Sigue siendo el LinearLayout que originalmente se definió en XML. De hecho, es suficiente para establecer la visibilidad en ese diseño original para mostrar / ocultar el fragmento. Entonces el código de la pregunta ahora se ve así:
public void onJobViewToggled(final boolean isWebView) {
if (isFinishing())
return;
final Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment);
if (scroll.isHidden() == isWebView)
return; // already handled, do nothing
final FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
if (scroll != null && scroll.isAdded()) {
if (isWebView) {
tr.hide(scroll);
// shell is the original placeholder
shell.setVisibility(View.GONE);
} else {
tr.show(scroll);
shell.setVisibility(View.VISIBLE);
}
}
tr.commit();
}
Tenga en cuenta que aún desea mostrar / ocultar el fragmento para que esto funcione
Dado:
- Dos elementos colocados verticalmente en la pantalla (ViewPager y Fragment)
- La acción en el primer fragmento seleccionado actualmente (ViewFlipper) alterna entre la vista basada en texto y la vista basada en WebView en el fragmento superior y oculta / muestra el fragmento inferior.
Observado:
- Ocultando el fragmento inferior deja un espacio vacío donde se encuentra el fragmento inferior.
Intenté tanto Relative como LinearLayout (con el fragmento superior configurado en weight=1
) pero ambos no tienen efecto después de eliminar el fragmento inferior. Aún tengo espacio vacío en la parte inferior.
Aquí está el archivo de diseño de nivel superior:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dip" android:layout_weight="1"/>
<!-- This gets replaced with appropriate fragment at run time -->
<LinearLayout
android:id="@+id/scrollFragmentPlaceholder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="110dip" />
</LinearLayout>
Aquí hay un código que alterna el fragmento
Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment);
if (scroll.isHidden() == isWebView)
return; // already handled, do nothing
FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
if (scroll != null && scroll.isAdded()) {
if (isWebView) {
tr.hide(scroll);
} else
tr.show(scroll);
}
tr.commit();
Y así es como se ve: