getFragmentManager().beginTransaction()
.replace(R.id.graph_fragment_holder, new GraphFragment(), "GRAPH_FRAGMENT")
.commit();
getFragmentManager().beginTransaction()
.replace(R.id.list_fragment_holder, new ListFragment(), "LIST_FRAGMENT")
.commit();
//getFragmentManager().executePendingTransactions();
GraphFragment graphFragment = (GraphFragment) getFragmentManager().findFragmentByTag("GRAPH_FRAGMENT");
graphFragment.setData(data);
ListFragment listFragment = (ListFragment) getFragmentManager().findFragmentByTag("LIST_FRAGMENT");
listFragment.setData(data);
I've supplied a tag so I'm not sure why findFragmentByTag()
returns null
.
What I've tried from reading other questions:
this.setRetainInstance(true)
in the oncreate
of both fragments
.
Both fragment
constructors are empty public fragmentName(){}
.
tried executePendingTransactions
after adding the fragments
.
tried add
instead of replace
on the fragments
(edited)
I was confused about this for a long time. First, you need to save the fragment you are replacing by pushing it onto the back stack. The tag you supply is put on the fragment you are adding, not the one you are pushing onto the back stack. Later, when you do push it onto the back stack, that tag goes with it. Here's code with objects broken out to make it easier to trace. You must call 'addToBackStack' before 'commit'.
GraphFragment grFrag = new GraphFragment(); FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); tr.replace(R.id.fragment_container, grFrag, "GRAPH_FRAGMENT"); // grFrag is about to become the current fragment, with the tag "GRAPH_FRAGMENT" tr.addToBackStack(null); // 'addToBackStack' also takes a string, which can be null, but this is not the tag tr.commit(); // any previous fragment has now been pushed to the back stack, with it's tag ListFragment liFrag = new ListFragment(); FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); tr.replace(R.id.fragment_container, liFrag, "LIST_FRAGMENT"); // liFrag is is about to become the current fragment, with the tag "LIST_FRAGMENT" tr.addToBackStack(null); tr.commit(); // 'grFrag' has now been pushed to the back stack, with it's tag being "GRAPH_FRAGMENT"
I was having the same problem of findFragmentByTag()
always returning null.
Eventually I tracked it down, I was overriding onSaveInstanceState()
in my Activity but not calling super. As soon as I fixed that findFragmentByTag()
returned the Fragment as expected.
Call getFragmentManager().executePendingTransactions() after fragment transaction.
getFragmentManager()
.beginTransaction()
.replace(R.id.container, new ExampleFragment(), "YOUR TAG HERE");
.commit();
//after transaction you must call the executePendingTransaction
getFragmentManager().executePendingTransactions();
//now you can get fragment which is added with tag
ExampleFragment exampleFragment = getFragmentManager().findFragmentByTag("YOUR TAG HERE");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With