varios trazar studio setup ruta marcadores mapa google geolocalizacion example ejemplo app agregar android google-maps android-fragments visibility

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