答えはどちらも正しいですが@David
、@ferdy182
文脈を教えてくれません。
プログラムでフラグメントを非表示/表示する@ferdy182
場合は、xmlにあるフラグメントを非表示/表示する場合に使用します。あなたは従うべきです@David
説明させてください
xmlに単一のframeLayoutがあり、その特定のフラグメントの他のフラグメントを次々に置き換えたい場合。このコードを使用して、すべてのフラグメントを追加します。それらは互いに配置されます。
for(int i=0;i<4;i++)
{
getFragmentManager().beginTransaction().add(R.id.container, frag[i])
//.addToBackStack(null)
.commit();
}// add all these fragment and put them on each other then
表示したいものを除いて、他のすべてのフラグメントを非表示にします。
for(int j=0;j<4;j++)
{
getFragmentManager().beginTransaction().hide(frag[j]).commit();
}
getFragmentManager().beginTransaction().show(frag[0]).commit();
利点
これらのフラグメントは、C#のフォームのように機能します。Forum.showおよびforum.hide(); 。現在の状態が残っているところ。これらのフラグメントは何度も呼び出されません。ここでの問題は、この手法を使用して解決します。2番目の方法
xmlに複数のframeLayoutまたはfragmentがある場合。IDを取得することで、その特定のものを非表示にできます。
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
コード
//非表示のときにフラグメントを表示します
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.show(fragment1)
.commit();
//フラグメントを非表示にします
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.hide(fragment1)
.commit();