为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑8549860 2021-08-25 16:43:13
我遇到的基本问题是我试图在每次返回特定片段时执行刷新函数。到目前为止,我一直在使用使用 setUserVisibleHint() 的解决方法,如下所示。@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {    super.setUserVisibleHint(isVisibleToUser);    if (isVisibleToUser) {        refresh();    }}但是,这仅在我的主片段和相关片段之间切换时有效。我想知道的是,当我从其他选项卡之一切换时,如何执行此代码?帮助将不胜感激。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超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();


            }

        });


查看完整回答
反对 回复 2021-08-25
?
开满天机

TA贡献1786条经验 获得超13个赞

根本原因:这是 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(){


        }

}


查看完整回答
反对 回复 2021-08-25
?
温温酱

TA贡献1752条经验 获得超4个赞

在片段下,您应该在片段的onResume()回调下调用您的方法。


public void onResume(){

  super.onResume();

  .....

}


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信