When using fragments inside a fragment, you should use the fragment's
ChildFragmentManager and not the (activity's) main FragmentManager.
On Thursday, May 23, 2013 9:12:31 AM UTC-4, Miha wrote:
>
> Hi!
>
> I'm using a ViewPager to swipe "between screens". One of the fragments is
> composed of two fragments, so the hierarchy looks like:
>
> ViewPager -> FragmentStatePageAdapter - > [Frag1, Frag2, Frag3], where
> Frag1's layout is composed of two FrameLayouts, to which two fragments are
> added like this:
>
> if (savedInstanceState != null) {
> FragmentManager supportFragmentManager =
> getActivity().getSupportFragmentManager();
> _computerListFragment = (ComputerListFragment)
> supportFragmentManager.findFragmentByTag(LIST_FRAGMENT);
> if (_computerListFragment != null) {
> _computerListFragment.setOnComputerSelectedListener(this);
> }
>
> _computerDetailsFragment = (ComputerDetailsFragment)
> supportFragmentManager.findFragmentByTag(DETAILS_FRAGMENT);
> if (_computerDetailsFragment != null) {
> _computerDetailsFragment.setOnComputerDetailsClickListener(this);
> }
>
> return root;
> }
>
> _computerListFragment = new ComputerListFragment();
> FragmentManager supportFragmentManager =
> getActivity().getSupportFragmentManager();
> FragmentTransaction transaction =
> supportFragmentManager.beginTransaction();
> transaction.add(R.id.computer_list_fragment, _computerListFragment,
> LIST_FRAGMENT);
>
> if (_isDualPane) {
> _computerDetailsFragment = new ComputerDetailsFragment();
>
> _computerDetailsFragment.setOnComputerDetailsClickListener(MainComputerFragment.this);
>
> transaction.add(R.id.computer_details_fragment,
> _computerDetailsFragment, DETAILS_FRAGMENT);
> }
> transaction.commit();
>
> This works well for orientation changes, the fragments get recreated
> appropriately and onSaveInstanceState gets called for inner fragments
> (above: ComputerListFragment and ComputerDetailsFragment), but when using
> ViewPager, I see that:
>
> 1) onSaveInstanceState is called on the First fragment, but not on the
> inner fragments (in above case, for ComputerListFragment and
> ComputerDetailsFragment)
> 2) trying to call
> getActivity().getSupportFragmentManager().saveFragmentInstanceState(_computerListFragment);
>
> yields NullPointerException
> in
> android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1588)
> 3) if I try to to add them again, I get an IllegalStateException that the
> fragment is already added (makes sense)
>
> It seems to me that I need to tell the fragmentManager that it should save
> the fragment states, and then to restore them, but I see no appropriate
> methods for this. It also seems to me that I would need to tell the
> fragmentManager to show the fragments, since ViewPager obviously removes
> them somehow...
>
> Or have I got it backwards somehow?
>
> Regards,
> Miha.
>
> ps: I was using ChildFragmentManager at first, but then switched to
> FragmentManager due to issue I was having. Could this be the case?
>
--
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.