我有一些Activity
单个全屏Fragment
。在Fragment
内部我有另一个Fragment
覆盖屏幕的底部。因此,在屏幕的顶部,我Button
控制内部Fragment
的可见/隐藏:
包含Fragment
的布局:
...
<FrameLayout
android:id="@+id/inner_fragment"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@+id/top_part"
android:name="com.package.InnerFragment" />
控制Button
:
controlButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isInnerVisible) showHideInnerFragment("show");
else showHideInnerFragment("hide");
}
});
辅助方法showHideInnerFragment
:
private void showHideInnerFragment(String param) {
//variables are class members...
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
innerFragment = new InnerFragment();
if (param.equals("show")) {
fragmentTransaction.add(R.id.inner_fragment, innerFragment);
isInnerVisible = true;
} else {
fragmentTransaction.remove(innerFragment);
isInnerVisible = false;
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
嗯 - 这完全不起作用......
答案 0 :(得分:1)
看来你的isInnerVisible总是假的(我假设它从false开始),这会删除片段但保持isInnerVisible为false。你可能只需要切换它:
private void showHideInnerFragment(String param) {
//variables are class members...
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
innerFragment = new InnerFragment();
if (param.equals("show")) {
fragmentTransaction.add(R.id.inner_fragment, innerFragment);
isInnerVisible = false;
} else {
fragmentTransaction.remove(innerFragment);
isInnerVisible = true;
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
我还会将一个true / false值传递给参数而不是字符串值,这样可以更容易理解代码正在做什么,因为它现在有点没用。我稍后会用一个例子更新;)
编辑:这是一个更好的方式来做你想要的:
controlButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showHideInnerFragment(isInnerVisible);
}
});
private void showHideInnerFragment(boolean isVisible) {
//variables are class members...
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
innerFragment = new InnerFragment();
if (isVisible == false) {
fragmentTransaction.add(R.id.inner_fragment, innerFragment);
isInnerVisible = true;
} else {
fragmentTransaction.remove(innerFragment);
isInnerVisible = false;
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}