Android: mostrar / ocultar fragmento deja un área vacía

Dado:

  1. Dos elementos colocados verticalmente en la pantalla (ViewPager y Fragmento)
  2. La acción en el primer fragmento actualmente seleccionado (ViewFlipper) cambia entre la vista basada en texto y WebView en el fragmento superior y oculta / muestra el fragmento inferior.

Observado:

  1. Ocultar el fragmento inferior deja un espacio vacío donde se encuentra el fragmento inferior.

He intentado tanto relativo y LinearLayout (con el fragmento superior a weight=1 ), pero ambos no tienen ningún efecto después de que el fragmento de fondo se elimina Todavía tengo espacio vacío en el fondo

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í está el 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: El fragmento inferior está oculto

Un mes más tarde me di cuenta de cómo hacerlo. Resulta que simplemente ocultar el fragmento no es suficiente, básicamente necesito ocultar / mostrar el shell que contiene el fragmento. Sigue siendo el LinearLayout que se definió originalmente en XML. De hecho, es suficiente establecer visibilidad en ese diseño original para mostrar / ocultar el fragmento. Así que 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 todavía desea mostrar / ocultar el fragmento para que esto funcione

  • La fuente del recurso no se carga en android webView
  • LocalStorage html5 no funciona en WebView en el dispositivo Samsung Android
  • ¿El método loadUrl de WebView se ejecuta en un subproceso de UI?
  • Inyección de puente Javascript en WebView
  • WebView y HTML5 <video>
  • Phonegap uso de la aplicación android cpu en el fondo
  • Webview guardar el problema de rotación de contraseña
  • Mostrar mensaje para conocer la ubicación
  • Accede a la cabecera de respuesta y al código de estado en la web en la aplicación para Android?
  • Después de un tiempo de uso, mi aplicación se congela durante el desplazamiento de un WebView, diciendo "no se pudo bloquear la superficie"
  • "Hola, WebView" tutorial abre la dirección solicitada en el navegador de Android y no en mi webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.