的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();
但是如何逐步设置地图片段可见性?
不能像其他人那样碎片。
答案 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();
}
}