2013-11-15 19 views
11

私のアクティビティでは、すべてのGUIフラグメントが単一のXMLレイアウトで宣言されています。それは、起動時にフラグメントのいくつかを表示するだけでよい。残りの部分は、ユーザーがアプリと対話するときに表示されます。次のようなレイアウトの一部は次のとおりです。フラグメントをXMLレイアウトで非表示として宣言するにはどうすればいいですか

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <fragment 
     android:id="@+id/map_panel" 
     android:name="com.example.MapPanel" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/map_panel_height" /> 
    <fragment 
     android:id="@+id/list_panel" 
     android:name="com.example.ListPanel" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/map_panel" /> 
    <fragment 
     android:id="@+id/detail_panel" 
     android:name="com.example.DetailPanel" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/map_panel" 
     android:visibility="gone" /> 

私の意図はlist_panelフラグメントは、起動時に表示され、ユーザーがリストから何かを選択するまでdetail_panelフラグメントが隠されているということです。

デフォルトでは、フラグメントはisHidden属性をfalseとして開始します。これは、私の活動が読み込まれた断片を反復して、手作業でdetail_panelのような断片にisHidden(true)を手動で呼び出さなければならないことを意味します。

isHiddenのステータスをXMLレイアウトで宣言することをお勧めします。しかし、<fragment>宣言にandroid:visibility="gone"を設定しても、isHiddenのステータスは変更されません。そのトリックを行う別の属性に関するドキュメントは見つかりません。

<fragment>にXML属性を設定して非表示にすることはできますか?

注:私は視界の視認性に関心がありません、私はfragment.isHidden()値に関係しています。これは、FragmentManagerがバックスタックを操作してアニメーションを実行する方法に影響します。ビューが見えない、またはなくなっているが、fragment.isHidden()の値がfalseのフラグメントでtransaction.show(fragment)を呼び出すと、FragmentManagerはビューを表示しません。参考までにhttp://developer.android.com/reference/android/app/Fragment.html#isHidden()を参照してください。

+0

あなたはAndroidを試しましたか?visibility = "invisible"? – Sushil

+0

はい、私は "消えた"ことに加えて "不可視"を試​​みました。フラグメントのisHiddenステータスにも影響しません。 –

+0

「行かないで」とはどういう意味ですか?あなたは単に目に見えないものを試しましたか?この場合、それはフラグメントを作成し、それを不可視の状態に保ちます。 – Sushil

答えて

-1

私たちはisVisibleメソッドを持っています Goneへの視認性検査にはスペースがかかりません Invisbleは実際の表示スペースをとっています。

+0

フラグメントの 'isHidden'状態ではなく、ビューの状態を記述しています。 –

2

この回答は、後で参考になると思いました。可視性はViewクラスの一部です - フラグメントは可視性値にアクセスできないがオブジェクトを拡張します。可能性として、FrameLayoutの子をフラグメントにして、レイアウト上で目に見えない、または消えてしまうことがあります。これにより、フラグメントが非表示に見えるようになります。

希望すると助かります!

+0

ビューの 'visibility'状態を変更しても、フラグメントの' isHidden'状態には影響しません。 –

+1

'FrameLayout'の周りに' fragment'をラッピングするのは、最も簡単で効果的なIMHOです – noloman

0
public void showHideFrgament(final Fragment fragment){ 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.setCustomAnimations(android.R.animator.fade_in, 
          android.R.animator.fade_out); 

    if (fragment.isHidden()) { 
        ft.show(fragment); 
        Log.d("hidden","Show"); 
       } else { 
        ft.hide(fragment); 
        Log.d("Shown","Hide");       
       } 
       ft.commit(); 

} 
4

私は断片を隠さなければならない同様の状況に直面しました。

私は単純にLinearLayoutの中にフラグメントを含め、表示/非表示にレイアウトをマークしました。この使い、JYOのポストをオフに基づいて

<LinearLayout 
    android:id="@+id/map_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="visible" > 

    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 
</LinearLayout> 
3

:これはAPIレベル23「mFragment」に私のために働いてい

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.hide(mFragment); 
    fragmentTransaction.commit(); 

を非表示にする断片です。

関連する問題