onResume() - 用于在多个 CHILD 片段之间切换

我遇到的基本问题是我试图在每次返回特定片段时执行刷新函数。


到目前为止,我一直在使用使用 setUserVisibleHint() 的解决方法,如下所示。


@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {

        refresh();

    }

}

但是,这仅在我的主片段和相关片段之间切换时有效。我想知道的是,当我从其他选项卡之一切换时,如何执行此代码?


帮助将不胜感激。


慕尼黑8549860
浏览 167回答 3
3回答

万千封印

寻呼机的行为里面片段作为可见即使没有当前用户可见,受影响的片段有所不同基于寻呼机offscreenPageLimit所以尝试刷新片段内setUserVisibleHint或onResume使用寻呼机时,没有任何效果。但是这是没有问题,因为它是预期的行为,寻呼机的目的是为了让页面间切换的用户,你在浏览器中切换标签..如果你还是坚持刷新页面,你可以做到这一点的寻呼机里面addOnPageChangeListener是这样的:viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){            @Override            public void onPageSelected(int position) {                super.onPageSelected(position);                Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position);                if(fragment != null && fragment instanceof RefreshableFragment)                    ((RefreshableFragment) fragment).refresh();            }        });

开满天机

根本原因:这是 Android 的一项功能,称为offscreen page limit,它将保留当前片段两侧的片段数,默认值为 1。在您的情况下,使用setUserVisibleHint不足以刷新数据。解决方案:public class YourFragment extends Fragment {        @Override        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,Bundle savedInstanceState) {            if (getUserVisibleHint()) { // fragment is visible to users.                refresh();            }            return super.onCreateView(inflater, container, savedInstanceState);        }        @Override        public void setUserVisibleHint(boolean isVisibleToUser) {            super.setUserVisibleHint(isVisibleToUser);            if (isVisibleToUser && isResumed()) { // fragment is visible to users                refresh();            }        }        public void refresh(){        }}

温温酱

在片段下,您应该在片段的onResume()回调下调用您的方法。public void onResume(){  super.onResume();  .....}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java