Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onResume()-用于在多个子片段之间切换_Java_Android_Android Fragments - Fatal编程技术网

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

Java onResume()-用于在多个子片段之间切换,java,android,android-fragments,Java,Android,Android Fragments,我遇到的基本问题是,每次返回到特定片段时,我都试图获得一个要执行的刷新函数 到目前为止,我一直在使用setUserVisibleHint()的解决方法,如下所示 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { refresh(); } }

我遇到的基本问题是,每次返回到特定片段时,我都试图获得一个要执行的刷新函数

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

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        refresh();
    }
}
但是,这仅在我的主片段和有问题的此片段之间切换时有效。我想知道的是,当我从另一个选项卡切换时,如何执行此代码


非常感谢您的帮助。

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

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

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

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

根本原因:这是Android的一项功能,名为
屏幕外页面限制
,它将保留当前片段两侧的片段数,默认值为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(){

        }
}

根本原因:这是Android的一项功能,名为
屏幕外页面限制
,它将保留当前片段两侧的片段数,默认值为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(){

        }
}

寻呼机内部的片段充当可见的,即使用户当前没有可见的片段,受影响的片段也会因寻呼机
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();

            }
        });

寻呼机内部的片段充当可见的,即使用户当前没有可见的片段,受影响的片段也会因寻呼机
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();

            }
        });

你累了吗?你累了吗