【问题标题】:Fragment onResume() isn't called when using FragmentPagerAdapter使用 FragmentPagerAdapter 时不调用 Fragment onResume()
【发布时间】: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()?

【问题讨论】:

    标签: android android-viewpager fragment 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 相同的逻辑。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多