以编程方式设置谷歌地图片段可见性(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(); 

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

不能像别人那样做片段。

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

这样简单:

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