使用tabLayout和ViewPager未在Fragment中调用OnResume()

Ant*_*nto 10 android android-fragments android-viewpager android-tablayout

我正在开发一个应用程序tabLayout.

我有一个问题:当我尝试重新激活a时Fragment,该方法OnResume未被调用.

这是我的活动:

 private void init() {
    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Nuovo Ticket", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });


    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);

    tabLayout.setupWithViewPager(viewPager);
}
Run Code Online (Sandbox Code Playgroud)

我像这样使用FragmentStatePagerAdapter:

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            return new LavorazioneFragment();
        case 1:
            return new PendingFragment();
        case 2:
            return new StoriciFragment();
        default:
            return null;
    }
}

@Override
public int getCount() {
    return mNumOfTabs;
}
Run Code Online (Sandbox Code Playgroud)

}

当我TAB1TAB3Fragment(最后一个)重新激活片段时,OnResume调用Method.但是,例如,

当我尝试从第二个选项卡重新激活第一个选项卡时,从未调用过.

Ant*_*nto 33

我已经解决了这个问题.我使用setUserVisibleHint(boolean isVisibileToUser)代替onResume().像这样:

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        init();
    } else {

    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你们!

  • 此方法现已弃用。 (3认同)
  • 作为一个说明,我认为至关重要的是要提到在返回或切换活动时不会被调用.当设备从休眠或休眠模式唤醒时,它也不会被调用.只有当用户通过在片段之间滑动或手动按下选项卡在标签之间切换时,才会调用此方法.所以不要忘记在onResume和onPause方法中包含逻辑. (2认同)

小智 7

接受的答案对我不起作用。但是,我找到了解决问题的方法。

只需使用以下构造函数初始化您的 FragmentStatePagerAdapter:

public MyPagerAdapter(FragmentManager fm, int behaviour) {
    super(fm, behaviour);
}
Run Code Online (Sandbox Code Playgroud)

像这样 :

MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getChildFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
Run Code Online (Sandbox Code Playgroud)