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"/>
En fragment régulier, cela se passe comme suit:
mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
mFragment.getView().setVisibility(View.INVISIBLE);
Dans le fragment de carte Google:
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
Mais comment définir progressivement la visibilité des fragments de carte?
Ne peut pas le faire comme les autres se fragmentent.
Aussi simple que cela:
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
Tu peux faire:
getSupportFragmentManager().beginTransaction().hide(mFragment).commit();
pour le montrer:
getSupportFragmentManager().beginTransaction().show(mFragment).commit();
La réponse Par @David
et @ferdy182
ont raison mais ils ne disent pas le contexte.
si vous masquez/affichez un fragment par programme, utilisez @ferdy182
et si vous voulez masquer/afficher un fragment qui est en xml. vous devez suivre @David
Laisse-moi expliquer
Si vous avez un seul frameLayout en xml et que vous souhaitez remplacer l'autre fragment dans celui-ci en particulier l'un après l'autre. utilisez ce code pour ajouter tous les fragments. ils seront placés les uns sur les autres.
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
masquez tous les autres fragments, sauf celui que vous souhaitez afficher.
for(int j=0;j<4;j++)
{
getFragmentManager().beginTransaction().hide(frag[j]).commit();
}
getFragmentManager().beginTransaction().show(frag[0]).commit();
Avantage Ces fragments fonctionnent comme la forme en c #. Forum.show et forum.hide (); . Là où l'état actuel reste le leur. ces fragments n'appellent pas encore et encore. Un problème ici je le résous en utilisant cette technique. 2ème méthode
lorsque vous avez plusieurs FrameLayout ou fragment en XML. vous pouvez masquer ce détail en obtenant son identifiant.
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
Codes
// pour montrer un fragment quand il est caché
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.show(fragment1)
.commit();
// pour cacher le fragment
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.hide(fragment1)
.commit();
Au lieu de créer un SupportMapFragment
en xml, il pourrait y avoir une autre approche dans laquelle nous pouvons définir un conteneur pour SupportMapFragment
en xml puis charger la carte à partir 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 une Fragment
, j'ai créé deux méthodes pour afficher et masquer la carte. J'ai utilisé la méthode de détachement et cela dépend des besoins. Nous pouvons également utiliser masquer 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();
}
}
Seulement ça marche pour moi:
View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);