使用 FragmentPagerAdapter 时不调用 Fragment onResume()

Posted

技术标签:

【中文标题】使用 FragmentPagerAdapter 时不调用 Fragment onResume()【英文标题】:Fragment onResume() isn't called when using FragmentPagerAdapter 【发布时间】:2013-03-05 23:31:39 【问题描述】:

我需要我的片段在它们是活动片段时始终调用某个函数,所以我把它放在 onResume() 中,但它没有被调用。

片段 A

@Override
public  void onResume()
    super.onResume();
    Log.d("clear state", " "+clear);
    if(clear == true)
    
        restart();
        clear = false;
        calculate();
    

我使用 FragmentPagerAdapter 和 ViewPager 来切换片段

public class ScoutingFragSingle extends FragmentPagerAdapter


@Override
public Fragment getItem(int index) 
    Bundle data = new Bundle();
    switch(index)
    case 0:
        TeamsFragment teamsFragment = new TeamsFragment();
        data.putInt("current_page", index+1);
        teamsFragment.setArguments(data);
        return teamsFragment;
    case 1:

        data.putInt("current_page", index+1);
        data.putInt("matchId", matchNum);
        aFragment.setArguments(data);
        return aFragment;

那么我如何让片段调用它们的 onResume()?

【问题讨论】:

【参考方案1】:

我之前也遇到过同样的问题。

创建一个新接口并由你的Fragments 实现它:

public interface OnPageSelectedListener 
    void onPageSelected();

在父活动中实现android.support.v4.view.ViewPager.OnPageChangeListener并像这样调用Fragment方法:

@Override
public void onPageSelected(int i) 
    OnPageSelectedListener fragment = (OnPageSelectedListener ((PlaceListPagerAdapter)pager.getAdapter()).getFragment(i);
    fragment.onPageSelected();

PS:新接口的名称和方法有点混乱,请注意或更改。

【讨论】:

【参考方案2】:

覆盖Fragment.setUserVisibleHint。当setUserVisibleHinttrue 时,调用与onResume 相同的逻辑。

您可以在instantiateItem 和setPrimaryItem 中看到FragmentPagerAdapter 何时调用setUserVisibleHint。自 4.2.1 和 support-v4 起适用于 android

【讨论】:

以上是关于使用 FragmentPagerAdapter 时不调用 Fragment onResume()的主要内容,如果未能解决你的问题,请参考以下文章

在 FragmentPagerAdapter 上调用 getItem() 时,它返回一个空片段

FragmentPagerAdapter加载fragment并使用setUserVisibleHint()处理预加载时遇到的坑,给textview赋值时出现的空指针异常

FragmentPagerAdapter与FragmentStatePagerAdapter区别

使用 FragmentPagerAdapter 时不调用 Fragment onResume()

如何刷新 FragmentPagerAdapter 的片段?

109FragmentPagerAdapter与FragmentStatePagerAdapter区别