Reputation: 3945
I have inside some Activity
single full screen Fragment
. Inside that Fragment
I have another Fragment
overlaying bottom part of the screen. So in the top part of the screen I have Button
controlling Visible/Hide of the inner Fragment
:
Layout of the containing 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" />
The controlling Button
:
controlButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isInnerVisible) showHideInnerFragment("show");
else showHideInnerFragment("hide");
}
});
The helper method 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();
}
Well - This totally not working...
Upvotes: 0
Views: 1355
Reputation: 4213
It appears that your isInnerVisible is always false (I'm assuming it starts off as false), which removes the fragment but keeps isInnerVisible false. You probably just need to switch that around:
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();
}
I would also pass a true/false value to the parameter rather than a string value, it makes it much easier to understand what the code is doing, as it is now it sort of doesn't make sense. I'll update with an example in a bit ;)
edit: here's a nicer way to do what you want:
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();
}
Upvotes: 1