使用FragmentPagerAdapter时不调用片段onResume()

时间:2013-03-17 16:22:29

标签: android android-viewpager fragment onresume

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

片段A

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

我使用带有ViewPager的FragmentPagerAdapter切换片段

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()?

2 个答案:

答案 0 :(得分:5)

我以前遇到过同样的问题。

创建一个新界面并由Fragment s:

实现
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:新界面的名称及其方法有点令人困惑,所以要小心或更改它。

答案 1 :(得分:3)

覆盖Fragment.setUserVisibleHint。当setUserVisibleHint true调用您用于onResume的相同逻辑时。

您可以在instantiateItemsetPrimaryItem中查看FragmentPagerAdapter何时拨打setUserVisibleHint。自4.2.1和 support-v4 以来适用于 android