Fixed
Status Update
Comments
dn...@google.com <dn...@google.com> #2
I guess hidden should just be defined. Meaning, right now, hidden should just defined as "whether this fragment was hidden as part of a transaction". Hidden is not equivalent with visibility. I think that's where the confusion comes from.
is...@google.com <is...@google.com>
il...@google.com <il...@google.com> #3
We have passed this to the development team and will update this issue with more information as it becomes available.
ap...@google.com <ap...@google.com> #4
Yeah, I'm seeing this issue as well, currently this is the workaround that I've come up with:
// This method is called when hide()/show() methods are called on the transaction. Unfortunately Android doesn't
// propagate it to the child fragments (even though their visibility is affected by the parent visibility), so we
// do it manually.
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
childFragmentManager.fragments.forEach { it.onHiddenChanged(hidden) }
}
// This method is called when hide()/show() methods are called on the transaction. Unfortunately Android doesn't
// propagate it to the child fragments (even though their visibility is affected by the parent visibility), so we
// do it manually.
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
childFragmentManager.fragments.forEach { it.onHiddenChanged(hidden) }
}
il...@google.com <il...@google.com> #5
@4 That actually won't technically fix as isHidden() will technically mismatch with the state passed into the child fragment. Each child fragment legitimately needs to have their state set to hidden.
Description
MainActivity}: java.lang.IllegalStateException: Fragment has not been attached yet.
Really helpfull exception...
Fragment.java:
void instantiateChildFragmentManager() {
if (mHost == null) {
throw new IllegalStateException("Fragment has not been attached yet.");
}
mChildFragmentManager = new FragmentManagerImpl();
mChildFragmentManager.attachController(mHost, new FragmentContainer() {
@Override
@Nullable
public View onFindViewById(int id) {
if (mView == null) {
throw new IllegalStateException("Fragment does not have a view");
}
return mView.findViewById(id);
}
@Override
public boolean onHasView() {
return (mView != null);
}
@Override
public Fragment instantiate(Context context, String className, Bundle arguments) {
return mHost.instantiate(context, className, arguments);
}
}, this);
}
So please just add stupid name of fragment to log like in my gist: