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.
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);
Vous pouvez faire:
getSupportFragmentManager().beginTransaction().hide(mFragment).commit();
Pour le montrer:
getSupportFragmentManager().beginTransaction().show(mFragment).commit();
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();
Seulement cela fonctionne pour moi:
View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
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();
}
}