使用ViewPager滑动时,Fragment不会调用OnResume()

时间:2016-08-21 22:44:31

标签: android android-studio android-fragments baseadapter onresume

解释我的问题

我花了很多时间,但是我不能让它工作。我在主要的Activty中使用(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();


}

UpdateView()中的BaseAdapter方法:

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

}

我的应用程序的屏幕截图,以便更好地理解mu问题:

enter image description here

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:9)

使用setUserVisibleHint(boolean isVisibleToUser)。

{{1}}

答案 1 :(得分:1)

您描述的行为是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;
        }
    }
});

答案 2 :(得分:0)

如果您的ViewPager只有2个页面,那么在滑动过程中两个片段都不会暂停,并且永远不会调用onResume()。

我相信默认情况下它始终会保留邻居页面,这意味着页面限制为1。

您可以尝试将其保留的页数设置为0.

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