简体   繁体   English

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

[英]onResume() - for switching between multiple CHILD fragments

The basic problem I have is i'm trying to get a refresh function to execute every time i return to a specific fragment. 我遇到的基本问题是,当我每次返回特定片段时,我都试图获取刷新函数来执行。

So far I've been using the workaround of utilizing setUserVisibleHint() as shown below. 到目前为止,我一直在使用利用setUserVisibleHint()的变通方法,如下所示。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        refresh();
    }
}

However, this only works when switching between my main fragment and this fragment in question . 但是,这仅在我的主片段有问题的 片段之间切换时才有效。 What i'm wondering is how do i get this code to execute when i switch from one of my other tabs? 我想知道的是,当我从其他选项卡之一切换时如何执行此代码?

Help would be much appreciated. 帮助将不胜感激。

Root cause: This is a feature from Android called offscreen page limit , it will retain the number of fragments to either side of current fragment, default value is 1. In your case using setUserVisibleHint is not enough to refresh data. 根本原因:这是Android的一项功能,称为“ offscreen page limit ,它将保留当前片段两侧的片段数,默认值为1。在您的情况下,使用setUserVisibleHint不足以刷新数据。

Solution: 解:

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(){

        }
}

Fragments inside Pager act as visible even if there are not currently visible to user, the affected fragments are differ based on Pager offscreenPageLimit so trying to refresh fragment inside setUserVisibleHint or onResume has no effect when using Pager. 寻呼机行为即使有目前没有对用户可见的可见里面的片段,受影响的片段是基于有所不同寻呼机offscreenPageLimit所以尝试刷新内部片段setUserVisibleHintonResume使用寻呼机时,没有任何效果。

However that is fine as it is intended behavior, the aim of Pager is to let user switch between pages as you switch tabs in your browser.. If you still insist on refreshing pages you can do this inside the Pager addOnPageChangeListener like this: 但是,按预期的行为很好,Pager的目的是让用户在浏览器中切换选项卡时在页面之间切换。如果仍然坚持刷新页面,则可以在Pager 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();

            }
        });

Under the fragment, you should call your method under onResume() callback of fragment. 在片段下,应在片段的onResume()回调下调用方法。

public void onResume(){
  super.onResume();
  .....
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM