Skip to content

Commit 152fdf6

Browse files
committed
Fix #783, onSupportVisible() is not called sometime on nested Fragments(FragmentStatePagerAdapter): https://stackoverflow.com/questions/44052437/uservisiblehint-is-false-on-selected-viewpager-fragment-managed-by-fragmentstate
1 parent 54ff12f commit 152fdf6

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

fragmentation_core/src/main/java/me/yokeyword/fragmentation/helper/internal/VisibleDelegate.java

+5-12
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public class VisibleDelegate {
2525
private boolean mNeedDispatch = true;
2626
private boolean mInvisibleWhenLeave;
2727
private boolean mIsFirstVisible = true;
28-
private boolean mFixStatePagerAdapter;
2928
private boolean mFirstCreateViewCompatReplace = true;
3029

3130
private Handler mHandler;
@@ -42,10 +41,9 @@ public VisibleDelegate(ISupportFragment fragment) {
4241
public void onCreate(@Nullable Bundle savedInstanceState) {
4342
if (savedInstanceState != null) {
4443
mSaveInstanceState = savedInstanceState;
45-
if (!mFixStatePagerAdapter) { // setUserVisibleHint() may be called before onCreate()
46-
mInvisibleWhenLeave = savedInstanceState.getBoolean(FRAGMENTATION_STATE_SAVE_IS_INVISIBLE_WHEN_LEAVE);
47-
mFirstCreateViewCompatReplace = savedInstanceState.getBoolean(FRAGMENTATION_STATE_SAVE_COMPAT_REPLACE);
48-
}
44+
// setUserVisibleHint() may be called before onCreate()
45+
mInvisibleWhenLeave = savedInstanceState.getBoolean(FRAGMENTATION_STATE_SAVE_IS_INVISIBLE_WHEN_LEAVE);
46+
mFirstCreateViewCompatReplace = savedInstanceState.getBoolean(FRAGMENTATION_STATE_SAVE_COMPAT_REPLACE);
4947
}
5048
}
5149

@@ -63,8 +61,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
6361
mFirstCreateViewCompatReplace = false;
6462
}
6563

66-
if (!mInvisibleWhenLeave && !mFragment.isHidden() &&
67-
(mFragment.getUserVisibleHint() || mFixStatePagerAdapter)) {
64+
if (!mInvisibleWhenLeave && !mFragment.isHidden() && mFragment.getUserVisibleHint()) {
6865
if ((mFragment.getParentFragment() != null && isFragmentVisible(mFragment.getParentFragment()))
6966
|| mFragment.getParentFragment() == null) {
7067
mNeedDispatch = false;
@@ -107,19 +104,15 @@ public void onHiddenChanged(boolean hidden) {
107104

108105
public void onDestroyView() {
109106
mIsFirstVisible = true;
110-
mFixStatePagerAdapter = false;
111107
}
112108

113109
public void setUserVisibleHint(boolean isVisibleToUser) {
114-
if (mFragment.isResumed() || (mFragment.isDetached() && isVisibleToUser)) {
110+
if (mFragment.isResumed() || (!mFragment.isAdded() && isVisibleToUser)) {
115111
if (!mIsSupportVisible && isVisibleToUser) {
116112
safeDispatchUserVisibleHint(true);
117113
} else if (mIsSupportVisible && !isVisibleToUser) {
118114
dispatchSupportVisible(false);
119115
}
120-
} else if (isVisibleToUser) {
121-
mInvisibleWhenLeave = false;
122-
mFixStatePagerAdapter = true;
123116
}
124117
}
125118

0 commit comments

Comments
 (0)