Android:显示和隐藏片段
Android: Display and Hide Fragment
我里面有一些Activity
单全屏Fragment
。在那个 Fragment
里面,我有另一个 Fragment
覆盖在屏幕的底部。所以在屏幕的顶部我有 Button
控制内部 Fragment
:
的 Visible/Hide
包含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();
}
嗯 - 这完全行不通...
您的 isInnerVisible 似乎始终为 false(我假设它开始时为 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();
}
我里面有一些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(); }
嗯 - 这完全行不通...
您的 isInnerVisible 似乎始终为 false(我假设它开始时为 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();
}