以编程方式设置谷歌地图片段可见性(API2)

时间:2012-12-12 05:58:35

标签: android google-maps android-fragments visibility

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

在常规片段中,它是这样的:

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

在Google地图片段中:

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

但是如何逐步设置地图片段可见性?

不能像其他人那样碎片。

5 个答案:

答案 0 :(得分:61)

这很简单:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

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

答案 1 :(得分:22)

你可以这样做:

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

显示它:

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

答案 2 :(得分:1)

答案@David@ferdy182都是正确的,但他们没有告诉上下文。

如果以编程方式隐藏/显示片段,则使用@ferdy182,如果要隐藏/显示xml中的片段。你应该遵循@David

让我解释一下

如果你在xml中有一个frameLayout,你想要一个接一个地替换那个特定的另一个片段。使用此代码添加所有片段。他们将彼此放在一起。

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 

隐藏除要显示的所有其他片段。

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

<强>效益   这些片段就像c#中的形式一样。 Forum.show和forum.hide(); 。目前的状态仍然是他们的。这些片段不会一次又一次地打电话。一个problem here我使用这种技术解决它。 第二种方法

当你在xml中有多个frameLayout或fragment时。你可以通过获取其ID来隐藏该特定内容。

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

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

<强>码

//在隐藏时显示片段

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

//隐藏片段

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

答案 3 :(得分:0)

只有这对我有用:

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);

答案 4 :(得分:0)

不是在xml中创建SupportMapFragment,而是可以使用另一种方法在xml中为SupportMapFragment定义容器,然后从类加载地图。

在XML中,假设容器为FrameLayout -

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

在我的Fragment java类中,我创建了两种显示和隐藏地图的方法。我使用分离,这取决于需要。我们也可以使用hide而不是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();
        }
    }