web-dev-qa-db-ja.com

プログラムでGoogleマップフラグメントの可視性を設定する(API2)

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

しかし、どのようにしてマップフラグメントの可視性を順応的に設定できますか?

他の断片のようにそれを行うことはできません。

24
David

このように単純:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();

mMapFragment.getView().setVisibility(View.INVISIBLE);
62
David

できるよ:

getSupportFragmentManager().beginTransaction().hide(mFragment).commit();

それを表示するには:

getSupportFragmentManager().beginTransaction().show(mFragment).commit();
22

両方の答え@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();
1
Jawad Zeb

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

それだけが私にとってうまくいきます:

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
0
Alexey O.