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