7

与えられた:

  1. 画面上に垂直に配置された2つの要素(ViewPagerとFragment)
  2. 現在選択されている最初のフラグメント(ViewFlipper)でのアクションにより、上部のフラグメントでテキストベースのビューとWebViewベースのビューが切り替わり、下部のフラグメントが非表示/表示されます。

観察された:

  1. 下のフラグメントを非表示にすると、下のフラグメントが配置されている場所に空のスペースが残ります。

(上部のフラグメントをに設定して)RelativeとLinearLayoutの両方を試しましweight=1たが、下部のフラグメントが削除された後は両方とも効果がありません。下部にまだ空きスペースがあります。

トップレベルのレイアウトファイルは次のとおりです。

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

フラグメントを切り替えるコードは次のとおりです

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

そして、これがどのように見えるかです: 下部のフラグメントが非表示になっています

4

1 に答える 1

16

一ヶ月後、私はそれを行う方法を考え出しました。フラグメントを非表示にするだけでは不十分であることがわかりました。基本的に、フラグメントを含むシェルを非表示/表示する必要があります。もともとXMLで定義されたのは依然としてLinearLayoutです。実際、フラグメントを表示/非表示にするには、元のレイアウトに可視性を設定するだけで十分です。したがって、質問のコードは次のようになります。

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

これを機能させるには、フラグメントを表示/非表示にする必要があることに注意してください

于 2012-06-13T05:37:32.783 に答える