27

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

在谷歌地图片段中:

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

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

不能像其他碎片那样做。

4

5 回答 5

65

就这么简单:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

mMapFragment.getView().setVisibility(View.INVISIBLE);
于 2012-12-12T20:18:19.890 回答
22

你可以做:

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

展示它:

getSupportFragmentManager().beginTransaction().show(mFragment).commit();
于 2012-12-20T13:40:42.213 回答
1

@DavidBy和的答案@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(); . 当前状态仍然存在的地方。这些片段不会一次又一次地调用。这里有一个问题,我使用这种技术解决了它。第二种方法

当您在 xml 中有多个 frameLayout 或片段时。你可以通过获取它的 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();
于 2014-07-17T07:37:24.497 回答
0

只有那对我有用:

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);
于 2016-06-02T17:46:40.077 回答
0

除了在 xml 中创建SupportMapFragment之外,还有另一种方法,我们可以SupportMapFragment在 xml 中定义容器,然后从类中加载映射。

在 XML 中,假设容器是FrameLayout-

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

在我的 java 类中Fragment,我创建了两种方法来显示和隐藏地图。我使用了分离,这取决于需要。我们也可以使用隐藏而不是分离。

   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();
        }
    }
于 2017-04-08T18:53:54.793 回答