@David
By和的答案@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();