Définir par programme Google Map fragment visibility (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"/>

Dans le fragment régulier, il va comme ceci:

  mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
  mFragment.getView().setVisibility(View.INVISIBLE);

Dans Google Map fragment:

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

Mais comment puis-je définir la visibilité des fragments de carte de manière progressive?

Ne peut pas le faire comme d'autres fragments.

23
demandé sur David 2012-12-12 09:58:35

5 réponses

Simple comme ceci:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

mMapFragment.getView().setVisibility(View.INVISIBLE);
58
répondu David 2012-12-12 20:18:19

Vous pouvez faire:

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

Pour le montrer:

getSupportFragmentManager().beginTransaction().show(mFragment).commit();
22
répondu Fernando Gallego 2012-12-20 13:40:42

Les deux réponses de @David et @ferdy182 sont correctes mais elles ne disent pas le contexte.

Si vous masquez / montrez le fragment par programme, utilisez @ferdy182 et si vous voulez masquer/montrer le fragment qui est en xml. vous devriez suivre @David

Laissez-moi vous expliquer

Si vous rencontrez un seul frameLayout en xml et que vous souhaitez remplacer l'autre fragment dans l'un après l'autre. utilisez ce code pour ajouter tous les fragments . ils seront sur place l'un de l'autre.

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 

Tout Cacher autre fragment sauf que vous voulez montrer.

for(int j=0;j<4;j++)
        {
        getFragmentManager().beginTransaction().hide(frag[j]).commit();
        }
        getFragmentManager().beginTransaction().show(frag[0]).commit();

Prestation Ces fragments fonctionnent comme une forme en c#. Forum.spectacle et forum.cacher(); . Où il reste leur état actuel. ces fragments n'appellent pas encore et encore. Un problème ici - je le résoudre à l'aide de cette technique. 2ème méthode

Lorsque vous avez plusieurs frameLayout ou fragment en xml . vous pouvez cacher ce particulier en obtenant son id.

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

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

Codes

// pour afficher le fragment quand il est caché

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .show(fragment1)
          .commit();

/ / pour masquer le fragment

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .hide(fragment1)
          .commit();
1
répondu Xar E Ahmer 2017-05-23 12:34:33

Seulement cela fonctionne pour moi:

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
0
répondu Alexey O. 2016-06-02 17:46:40

Au lieu de créer un SupportMapFragment en xml, il pourrait y avoir une autre approche dans laquelle nous pouvons définir le conteneur pour SupportMapFragment en xml, puis Charger la carte de la classe.

En XML, disons que le conteneur est FrameLayout -

    <FrameLayout
        android:id="@+id/mapContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

Dans ma classe java qui est un Fragment, j'ai créé deux méthodes pour afficher et masquer la carte. J'ai utilisé détacher et cela dépend du besoin. Nous pouvons également utiliser cacher au lieu de détacher.

   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
répondu Rahul 2017-04-08 18:53:54