2012-05-21 4 views
7

Gegeben:Android - Einblenden/Ausblenden Fragment läßt einen leeren Bereich

  1. zwei vertikal platziert Elemente auf dem Bildschirm (ViewPager und Fragment)
  2. Aktion in dem ersten aktuell ausgewählten Fragmente (ViewFlipper) zwischen text- toggelt basierte und WebView-basierte Ansicht im oberen Fragment und versteckt/zeigt das unterste Fragment.

Beobachtet:

  1. das untere Fragment Hiding lässt einen leeren Raum, in dem das untere Fragment befindet.

Ich habe versucht, sowohl relativ als auch Linearlayout (mit oben nach weight=1 gesetzt Fragmente), aber beide haben keinen Effekt nach unten Fragment ich noch leeren Raum habe auf der Unterseite

entfernt Hier Top-Level-Layout-Datei:

<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> 

hier ist Code, der das 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(); 

Und hier schaltet ist, wie es aussieht: Bottom fragment is hidden

+0

Haben Sie * .measure versucht zu tun() in der Ansicht, die bleibt ? – Codeman

+0

Nicht wirklich, aber wenn ich die Reihenfolge umkehren und Textversion anzeigen/unten ausblenden zeigt es richtig – Bostone

+0

WebView für Android ist verdammt seltsam. Könnten Sie ein paar Screenshots hinzufügen, damit ich genauer sehen kann, worüber Sie sprechen? Außerdem müssen Sie in beiden Ansichten layoutWeight = 1 haben, wenn sie die Hälfte des verfügbaren Speicherplatzes einnehmen sollen. Sie müssen sicherstellen, dass Sie auch orientation = "vertical" in der übergeordneten Ansicht angeben. – Codeman

Antwort

16

Einen Monat später habe ich herausgefunden, wie es geht. Stellt sich heraus, dass das Verstecken des Fragments einfach nicht ausreicht, ich muss die Shell, die das Fragment enthält, verstecken. Es ist immer noch das LinearLayout, das ursprünglich in XML definiert wurde. In der Tat ist es ausreichend, die Sichtbarkeit des ursprünglichen Layouts festzulegen, um das Fragment anzuzeigen/auszublenden. So ist der Code von der Frage sieht nun wie folgt aus:

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

Beachten Sie, dass Sie noch zeigen möchten/das Fragment für diese verstecken arbeiten

+1

Wie bekommen Sie Shell? – Nick