A getParentFragment()
from my nested fragment is returning a null
. I realise that getting a null
means that the fragment is attached to the activity and not to the nested container fragment. But I am explicitly nesting the child fragment inside the parent fragment using the child FragmentManager
and thus think that I should not be getting a null
. Could you tell me what I am missing?
Parent fragment
public class UsageBreakUp extends Fragment implements Filter.OnFragmentInteractionListener { .... @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getChildFragmentManager().beginTransaction().add(R.id.filter, new Filter()).commit(); } ... }
Child fragment
public class Filter extends Fragment { ... public Filter() { if (getParentFragment() == null) Log.d(LOG_TAG, "parent fragment is null"); } ... }
When working with child fragments, your parent fragment and its child fragments might need to share data with each other. To share data between these fragments, use the parent fragment as the ViewModel scope.
FragmentManager is the class responsible for performing actions on your app's fragments, such as adding, removing, or replacing them, and adding them to the back stack.
You need to call an extra method every time you want to instantiate the Fragment . You can't guarantee that mListener is set at any time. You may need to pepper your Fragment code with null checks. You need to be careful to make sure the listener remains set after lifecycle events such as screen rotation.
I was calling getParentFragment()
in the constructor of the child fragment and thus before the child fragment was fully created. Shifting getParentFragment()
to onCreateView()
solved the problem. Shifting wasn't an issue as I was calling getParentFragment()
to check if the parent fragment had implemented a child fragment interaction listener.
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