Programmatically set google map fragment visibilit

2019-01-11 22:31发布

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"/>

In regular fragment it goes like this:

  mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
  mFragment.getView().setVisibility(View.INVISIBLE);

In Google map fragment:

  mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();

But how can I set map fragment visibility progrematically?

Can't do it like others fragment.

5条回答
来,给爷笑一个
2楼-- · 2019-01-11 22:48

Both the answer By @David and @ferdy182 are right but they don't told the context.

if you hide/show fragment Programmatically then use @ferdy182 and if you want to hide/show fragment which is in xml. you should follow @David

Let me explain

If you are having a single frameLayout in xml and you want to replace the other fragment in that particular one after another. use this code to add all fragment . they will be place on one another.

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 

hide all other fragment except which you want to show.

for(int j=0;j<4;j++)
        {
        getFragmentManager().beginTransaction().hide(frag[j]).commit();
        }
        getFragmentManager().beginTransaction().show(frag[0]).commit();

Benefit These fragment work like form in c#. Forum.show and forum.hide(); . Where there current state remain their. these fragment don't call again and again. A problem here i solve it using this technique. 2nd Method

when you are having multiple frameLayout or fragment in xml . you can hide that particular by getting its id.

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();

mMapFragment.getView().setVisibility(View.INVISIBLE);

Codes

// to show fragment when it is hidden

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .show(fragment1)
          .commit();

// to hide fragment

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .hide(fragment1)
          .commit();
查看更多
对你真心纯属浪费
3楼-- · 2019-01-11 22:51

You can do:

getSupportFragmentManager().beginTransaction().hide(mFragment).commit();

to show it:

getSupportFragmentManager().beginTransaction().show(mFragment).commit();
查看更多
We Are One
4楼-- · 2019-01-11 22:56

Only that works for me :

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
查看更多
老娘就宠你
5楼-- · 2019-01-11 23:04

Instead of creating a SupportMapFragment in xml, there could be another approach in which we can define container for SupportMapFragment in xml and then load map from class.

In XML, let say container is FrameLayout-

    <FrameLayout
        android:id="@+id/mapContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

In my java class which is a Fragment, I have created two methods to show and hide map. I used detach and it depends on need. We can also use hide instead of 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();
        }
    }
查看更多
相关推荐>>
6楼-- · 2019-01-11 23:07

Simple as this:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();

mMapFragment.getView().setVisibility(View.INVISIBLE);
查看更多
登录 后发表回答