Matroska
Matroska

Reputation: 6923

Dynamically added fragments are not removed when the container is removed

I am trying to understand a bad behaviour in fragments: the onCreateView and onActivityCreated methods are called even the fragment is not 'visible' in the layout.

If you use the code:

TestFragment testFragment = new TestFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentDetail, testFragment, "test");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

replacing the FrameLayout with id fragmentDetail with the fragment and then you rotate the device, the fragments method are still invoked even if the container is not present anymore in the portrait layout. This doesn't happen if you use the 'static' <fragment> tag. If you use the static fragment, the fragments methods are invoked just when the fragment appears. Is it possible to achieve the same behaviour without using the fragment tag? I need a way to avoid the rendering of the fragment if it is not in the layout.

Thanks

Upvotes: 2

Views: 4679

Answers (2)

Matroska
Matroska

Reputation: 6923

I have found one fix to this. It is slightly different from the suggested Handling orientation changes with Fragments one:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     if (!fragment.isInLayout() && container == null) return null;
     ...
     }

In this way you can avoid the case when the fragment is statically put into the layout (in that case the container is null but the method isInLayout() returns true. By the way it is still weird to me this behaviour.

Upvotes: 2

Gangnus
Gangnus

Reputation: 24464

AFAIK, fragments work almost as Activities. They have the same lifecycle. http://developer.android.com/reference/android/app/Fragment.html#Lifecycle So, if you don't have references to them, it won't make them close. They are referenced by the system and live by themselves. So, you should finish them somehow.

Upvotes: 0

Related Questions