android-fragments 使用ViewPager滑动时,片段未调用OnResume()

6bc51xsx  于 2022-11-13  发布在  Android
关注(0)|答案(4)|浏览(260)

解释我的问题

我花了很多时间,但我不能让这个工作。我有视图寻呼机在主要活动中包含三个片段使用(Tabhost)。我的ViewPagerAdapter类扩展FragmentStatePagerAdapter
我遇到的问题是,当我滑动视图时,我的OnResume()方法没有被调用。我想在滑动时更新viewpager片段的视图。
我的OnResume()方法只在我单击ListView项并再次返回时被调用。但是当我在ListView上按OnLongClick时,其他片段不会被刷新。

:我知道这个问题以前有人问过,但这些解决方案都没有帮助我。
**注2:**当我的手机进入睡眠状态,然后解锁手机后,第二个片段调用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();

}

BaseAdapter中的UpdateView()方法:

public void UpdateView(List<Voiture> items) {
    this.voitureList = items;
    notifyDataSetInvalidated();
    notifyDataSetChanged();

}

我的应用程序的屏幕截图,以了解更多的mu问题:

任何帮助都将不胜感激。

gijlo24d

gijlo24d1#

您描述的行为就是ViewPager的工作方式,没有任何问题。
此外,如果您检查ViewPager类的源代码,您会注意到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;
        }
    }
});
7hiiyaii

7hiiyaii2#

如果你设置屏幕外页面限制= 0,那么这个在swipe onviewcreate或onviewcreated方法也会一次又一次地调用,这可能会干扰你的应用程序的流程。我使用的最佳方法是在你的片段中使用接口方法覆盖,并在页面更改时调用这个覆盖方法,这将对你很好地工作

cngwdvgl

cngwdvgl3#

如果ViewPager只有2个页面,则在滑动期间两个片段都不会暂停,并且永远不会调用onResume()。
我相信默认情况下它总是保留邻居页面,这意味着它的页面限制为1。
您可以尝试将其保留的页数设置为0。

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(0);
ccrfmcuu

ccrfmcuu4#

使用设置用户可见提示(布尔值为“对用户可见”)。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
       // Do your stuff here
    }

}

相关问题