xml:
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/mapFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"/>
通常のフラグメントでは、次のようになります。
mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
mFragment.getView().setVisibility(View.INVISIBLE);
Googleマップのフラグメントでは:
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
しかし、どのようにしてマップフラグメントの可視性を順応的に設定できますか?
他の断片のようにそれを行うことはできません。
このように単純:
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
できるよ:
getSupportFragmentManager().beginTransaction().hide(mFragment).commit();
それを表示するには:
getSupportFragmentManager().beginTransaction().show(mFragment).commit();
両方の答え@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();
Benefitこれらのフラグメントは、c#のフォームのように機能します。 Forum.showおよびforum.hide(); 。現在の状態のままです。これらのフラグメントは何度も呼び出されません。 ここでの問題 この手法を使用して解決します。 2番目の方法
xmlに複数のframeLayoutまたはフラグメントがある場合。あなたはその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();
SupportMapFragment
をxmlで作成する代わりに、SupportMapFragment
のコンテナーをxmlで定義し、クラスからマップをロードする別のアプローチが考えられます。
XMLでは、コンテナがFrameLayout
-であるとしましょう
<FrameLayout
Android:id="@+id/mapContainer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:visibility="gone" />
私のJava Fragment
であるクラス)で、マップを表示および非表示にする2つのメソッドを作成しました。デタッチを使用しましたが、それは必要に応じて異なります。デタッチの代わりに非表示を使用することもできます。
private void showMap() {
mMapContainer.setVisibility(View.VISIBLE);
mSupportMapFragment = SupportMapFragment.newInstance();
getChildFragmentManager().beginTransaction()
.replace(R.id.mapContainer, mSupportMapFragment).commit();
}
private void hideMap() {
mMapContainer.setVisibility(View.VISIBLE);
if (mSupportMapFragment != null) {
getChildFragmentManager().beginTransaction()
.detach(mSupportMapFragment).commit();
}
}
それだけが私にとってうまくいきます:
View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);