使用 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】:我之前也遇到过同样的问题。
创建一个新接口并由你的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:新接口的名称和方法有点混乱,请注意或更改。
【讨论】:
【参考方案2】:覆盖Fragment.setUserVisibleHint。当setUserVisibleHint
为true
时,调用与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()