使用 ViewPager 滑动时片段不会调用 OnResume()
Fragment's are not calling OnResume() when swiping with ViewPager
解释我的问题:
我花了很多时间,但我无法做到这一点 work.I 在包含三个使用 (Tabhost).My ViewPagerAdapter class 扩展 FragmentStatePagerAdapter
的主要活动中查看寻呼机。
我面临的问题是,当我滑动视图时,我的 OnResume()
方法没有被调用。我想在滑动时更新 viewpager 片段的视图。
我的 OnResume()
方法仅在我单击 ListView
项并再次单击时调用。但是当我在 ListView 上按 OnLongClick 时,其他片段不会刷新。
注意 :我知道这个问题之前有人问过,但是 none 这些解决方案帮助了我。
注意 2: 当我的 phone 进入睡眠状态然后解锁后 phone 第二个片段调用 onResume()
我的 OnResume()
第一个选项卡中的方法:
@Override
public void onResume() {
super.onResume();
adapterLogin.notifyDataSetChanged();
}
我的 OnResume()
第二个选项卡中的方法:
@Override
public void onResume() {
super.onResume();
adapterLogin.UpdateView(databaseHelper.getAllVoitureFavourite(1,username));
adapterLogin.notifyDataSetInvalidated();
adapterLogin.notifyDataSetChanged();
}
我的 UpdateView()
方法在 BaseAdapter
中:
public void UpdateView(List<Voiture> items) {
this.voitureList = items;
notifyDataSetInvalidated();
notifyDataSetChanged();
}
我的应用程序的屏幕截图,以进一步了解 mu 问题:
任何帮助将不胜感激。
如果您的 ViewPager 只有 2 个页面,那么在滑动期间两个片段都不会暂停,并且永远不会调用 onResume()。
我相信默认情况下它总是保留相邻页面,这意味着它的页面限制为 1。
您可以尝试将它保留的页数设置为 0。
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(0);
您描述的行为就是 ViewPager 的工作方式,没有任何问题。
此外,如果您查看 ViewPager 的源代码 class,您会注意到最小的 offscreenPageLimit 为 1。将其设置为 0 根本没有任何作用,因为它会回退到默认值 1。
您可以添加一个 TabHost.OnTabChangeListener 以便在每次滑动时调用适当的方法。
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
switch (mTabHost.getCurrentTab()) {
case 0:
//fragment 1 update()
break;
case 1:
//fragment 2 update()
break;
case 2:
//fragment 3 update()
break;
}
}
});
使用 setUserVisibleHint(boolean isVisibleToUser)。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do your stuff here
}
}
解释我的问题:
我花了很多时间,但我无法做到这一点 work.I 在包含三个使用 (Tabhost).My ViewPagerAdapter class 扩展 FragmentStatePagerAdapter
的主要活动中查看寻呼机。
我面临的问题是,当我滑动视图时,我的 OnResume()
方法没有被调用。我想在滑动时更新 viewpager 片段的视图。
我的 OnResume()
方法仅在我单击 ListView
项并再次单击时调用。但是当我在 ListView 上按 OnLongClick 时,其他片段不会刷新。
注意 :我知道这个问题之前有人问过,但是 none 这些解决方案帮助了我。
注意 2: 当我的 phone 进入睡眠状态然后解锁后 phone 第二个片段调用 onResume()
我的 OnResume()
第一个选项卡中的方法:
@Override
public void onResume() {
super.onResume();
adapterLogin.notifyDataSetChanged();
}
我的 OnResume()
第二个选项卡中的方法:
@Override
public void onResume() {
super.onResume();
adapterLogin.UpdateView(databaseHelper.getAllVoitureFavourite(1,username));
adapterLogin.notifyDataSetInvalidated();
adapterLogin.notifyDataSetChanged();
}
我的 UpdateView()
方法在 BaseAdapter
中:
public void UpdateView(List<Voiture> items) {
this.voitureList = items;
notifyDataSetInvalidated();
notifyDataSetChanged();
}
我的应用程序的屏幕截图,以进一步了解 mu 问题:
任何帮助将不胜感激。
如果您的 ViewPager 只有 2 个页面,那么在滑动期间两个片段都不会暂停,并且永远不会调用 onResume()。
我相信默认情况下它总是保留相邻页面,这意味着它的页面限制为 1。
您可以尝试将它保留的页数设置为 0。
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(0);
您描述的行为就是 ViewPager 的工作方式,没有任何问题。
此外,如果您查看 ViewPager 的源代码 class,您会注意到最小的 offscreenPageLimit 为 1。将其设置为 0 根本没有任何作用,因为它会回退到默认值 1。
您可以添加一个 TabHost.OnTabChangeListener 以便在每次滑动时调用适当的方法。
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
switch (mTabHost.getCurrentTab()) {
case 0:
//fragment 1 update()
break;
case 1:
//fragment 2 update()
break;
case 2:
//fragment 3 update()
break;
}
}
});
使用 setUserVisibleHint(boolean isVisibleToUser)。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do your stuff here
}
}