1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| class ExampleFragment extends Fragment{
@Override public void setUserVisibleHint(boolean isVisibleToUser) { boolean change = isVisibleToUser != getUserVisibleHint(); super.setUserVisibleHint(isVisibleToUser); if (isResumed() && change) { if (getUserVisibleHint()) { onVisible(); } else { onInvisible(); } } }
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { onInvisible(); } else { onVisible(); } }
@Override public void onResume() { super.onResume(); if (getUserVisibleHint() && !isHidden()) { onVisible(); } }
@Override public void onPause() { super.onPause(); if (getUserVisibleHint() && !isHidden()) { onInvisible(); } }
private void onInvisible() { }
private void onVisible() { initData(); } }
|
补充 :
setUserVisibleHint 为什么只在 Viewpager 有效?
实际上查看 setUserVisibleHint 的实际调用方,只有 FragmentPagerAdapter 和 FragmentStatePagerAdapter,也即 ViewPager 的适配器有调用。