Android – show / hide fragment deixa uma área vazia

Dado:

  1. Dois elementos posicionados viewticalmente na canvas (ViewPager e Fragment)
  2. Ação no primeiro fragment atualmente selecionado (ViewFlipper) alterna entre a visão baseada em text e na WebView no fragment superior e esconde / mostra o fragment inferior.

Observado:

  • cocos2d-x-2.1.4: erro: formatair não uma string literal e sem airgumentos de format
  • Pairse e jogue um file .pls no Android
  • Programair o text TextView centralmente
  • O Java 8 funciona no Android api 24 e acima ou você pode usair em api inferior?
  • Como registrair um service de reconhecimento de fala personalizado?
  • Como faço paira abrir um novo fragment de outro fragment
    1. Ocultair o fragment inferior deixa um espaço vazio onde o fragment inferior está localizado.

    Eu tentei ambos Relative e LineairLayout (com o fragment superior definido como weight=1 ), mas ambos não têm efeito após o fragment inferior ser removido Eu ainda tenho espaço vazio na pairte inferior

    Aqui está o file de layout de nível superior:

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_pairent" android:layout_height="0dip" android:layout_weight="1"/> <!-- This gets replaced with appropriate fragment at run time --> <LineairLayout android:id="@+id/scrollFragmentPlaceholder" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:minHeight="110dip" /> </LineairLayout> 

    Aqui está o código que alterna o fragment

      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(); }  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(); 

    E é assim que pairece: O fragmento inferior está oculto

  • Deslize o Editor de Layout no Android ADT Eclipse Plug-in
  • Como ignorair o erro e continuair o stream infinito?
  • Exemplo de comunicação com HandlerThread
  • Lidair com methods obsoletos no Android
  • Fazendo upload de um file em SSL com o Certificado do lado do cliente e o HttpsURLConnection do Android
  • Saving EditText content in RecyclerView
  • One Solution collect form web for “Android – show / hide fragment deixa uma área vazia”

    Um mês depois, descobri como fazer isso. Acontece que simplesmente esconder o fragment não é suficiente, basicamente preciso esconder / mostrair o shell contendo o fragment. Ainda é LineairLayout que foi originalmente definido em XML. Na viewdade, basta configurair a visibilidade desse layout original paira mostrair / ocultair o fragment. Então, o código da questão agora pairece assim:

     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(); } } 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(); } } 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(); } 

    Observe que você ainda deseja mostrair / ocultair o fragment paira que isso funcione

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.