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

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

但是,我怎样才能设置地图片段的可见性

不能像别人那样做片段。

  • 使用Google地图首次推出的活动非常缓慢
  • 如何把重点放在谷歌地图的位置,考虑一个视图是最重要的呢?
  • AlertDialog中的多个EditText对象
  • android maps v2崩溃时重新打开片段
  • 在应用程序中使用谷歌地图离线
  • Android- Google地图v2绘制圆圈
  • 无法parsingFragment中的方法'getSupportFragmentManager()'
  • Android地图实用工具:来自url的图片
  • 这样简单:

     private GoogleMap mMap; private SupportMapFragment mMapFragment; mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment)); mMap = mMapFragment.getMap(); mMapFragment.getView().setVisibility(View.INVISIBLE); 

    你可以做:

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

    显示它:

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

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

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

    让我解释

    如果你在xml中有一个frameLayout,并且你想要replace那个特定的其他片段。 使用此代码添加所有片段。 他们会彼此相依。

     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#中的forms。 Forum.show和forum.hide(); 。 现在的状态依然存在。 这些片段不会再次调用。 我用这个技术解决了一个问题 。 第二种方法

    当你有多个frameLayout或XML中的片段。 你可以隐藏这个特定的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(); 

    只有这对我有用:

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

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

    在XML中,让容器是FrameLayout

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

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