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