android - trazar - Establecer programáticamente la visibilidad del fragmento de mapa de google(API2)
google maps android example (5)
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 un fragmento regular, dice así:
mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
mFragment.getView().setVisibility(View.INVISIBLE);
En fragmento de mapa de Google:
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
Pero, ¿cómo puedo establecer la visibilidad del fragmento de mapa de forma progresiva?
No puedo hacerlo como otros fragmentos.
En lugar de crear un SupportMapFragment
en xml, podría haber otro enfoque en el que podamos definir container para SupportMapFragment
en xml y luego cargar el mapa de la clase.
En XML, digamos contenedor es FrameLayout
-
<FrameLayout
android:id="@+id/mapContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
En mi clase Java, que es un Fragment
, he creado dos métodos para mostrar y ocultar el mapa. Utilicé separar y depende de la necesidad. También podemos usar hide en lugar de detach.
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();
}
}
Solo eso funciona para mí:
View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
Tan simple como esto:
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
Tanto la respuesta por @David
como @ferdy182
tienen razón, pero no cuentan el contexto.
si oculta / muestra un fragmento mediante programación, use @ferdy182
y si quiere ocultar / mostrar el fragmento que está en xml. debes seguir a @David
Dejame explicar
Si tiene un frameLayout único en xml y desea reemplazar el otro fragmento en ese particular tras otro. usa este código para agregar todo el fragmento. se colocarán el uno sobre el otro.
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
esconde todos los demás fragmentos excepto los que quieras mostrar.
for(int j=0;j<4;j++)
{
getFragmentManager().beginTransaction().hide(frag[j]).commit();
}
getFragmentManager().beginTransaction().show(frag[0]).commit();
Beneficio Estos fragmentos funcionan como la forma en c #. Forum.show y forum.hide (); . Donde el estado actual sigue siendo su. estos fragmentos no llaman una y otra vez. Un problema aquí lo resuelvo usando esta técnica. Segundo método
cuando tiene múltiples frameLayout o fragmentos en xml. puedes ocultar ese particular al obtener su identificación.
private GoogleMap mMap;
private SupportMapFragment mMapFragment;
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();
mMapFragment.getView().setVisibility(View.INVISIBLE);
Códigos
// para mostrar el fragmento cuando está oculto
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.show(fragment1)
.commit();
// para ocultar fragmento
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.hide(fragment1)
.commit();
Tu puedes hacer:
getSupportFragmentManager().beginTransaction().hide(mFragment).commit();
para mostrarlo:
getSupportFragmentManager().beginTransaction().show(mFragment).commit();