9

それはどのように機能しますか?私は以下のようなレイアウトを持っています:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/search_form_fragment"
        android:name="FragmentClass"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <fragment
        android:id="@+id/result_list_fragment"
        android:name="FragmentClass"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />
</LinearLayout>

2 番目のフラグメントがandroid:visibility="gone"あり、実際には画面に表示されないことに注意してください。しかし、このコード:

boolean bothVisible = firstFrag.isVisible() && secondFrag.isVisible();

これは私trueには予想外でした。android:visibilityドキュメントでそれに関する情報が見つからなかったので、使用が正しいのだろうか。

4

2 に答える 2

7

Fragment sourceごとに、次のisVisibleように定義されます。

 final public boolean isVisible() {
    return isAdded() && !isHidden() && mView != null
            && mView.getWindowToken() != null && 
               mView.getVisibility() == View.VISIBLE;
}

つまり、アクティビティにアタッチされ、( FragmentTransaction.hideを介して) 非表示にならず、ビューが拡張され、ビューがウィンドウにアタッチされ、フラグメントの内部ビューView.VISIBLE.

問題は、フラグメントを膨らませるために、システムがフラグメントのビューを保持するレイアウトを作成することだと思います。に設定しているのはそのビューView.GONEであり、フラグメントが作成する内部ビューではありません。

あなたの状態を次のように変更することをお勧めします。

findViewById(R.id.result_list_fragment).getVisibility() == View.VISIBLE
于 2013-05-09T17:15:31.663 に答える
0

私はこれをやってみました

XML

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lateral_login_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"/>

コード

LoginFrag = LoginFragment.newIstance();     
FragmentTransaction LoginTransaction = fm.beginTransaction();
LoginTransaction.replace(R.id.lateral_login_frame, LoginFrag);
LoginTransaction.commit();

Log.d("visibility", String.valueOf(LoginFrag.isVisible()));

そして私のログは:

05-09 19:07:54.236: D/visibility(3483): false

Androidのドキュメントから、isVisible() フラグメントが現在ユーザーに表示されている場合は true を返します。これは、(1) が追加され、(2) そのビューがウィンドウにアタッチされ、(3) 非表示になっていないことを意味します。

まだフラグメントを追加していない可能性がありますか? コードからはわかりません。お役に立てれば。

于 2013-05-09T17:13:50.370 に答える