public interface FragmentLifecycle {
public void onPauseFragment();
public void onResumeFragment();
}
2)让每个Fragment为每个类声明实现接口Add iplements语句:
public class FragmentBlue extends Fragment implements FragmentLifecycle
public class FragmentGreen extends Fragment implements FragmentLifecycle
public class FragmentPink extends Fragment implements FragmentLifecycle
// other code
mViewPager.addOnPageChangeListener(object: ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
val oldPosition = mViewPager.currentItem
val oldFragment = mViewPager.adapter?.instantiateItem(mViewPager, oldPosition)
oldFragment.onPauseStuff() // Hint: do as here call onPause
val newFragment = mViewPager.adapter?.instantiateItem(mViewPager, position)
newFragment.onResumeStuff() // Hint: do as here call onResume
}
// other code
public Object instantiateItem(@NonNull ViewGroup container, int position) {
Fragment fragment = fragments.get(position);
if (fragment == null) {
fragment = (Fragment) super.instantiateItem(container, position);
fragments.put(position, fragment);
}
return fragment;
}
public Fragment getFragment(int position) {
return fragments.get(position);
}
8条答案
按热度按时间up9lanfz1#
FragmentPagerAdapter将显示的片段之外的其他片段保持在恢复状态。解决方案是实现一个自定义的OnPageChangeListener,并创建一个新的方法用于显示片段。
1)创建LifecycleManager接口该接口将有两个方法,每个ViewPager的Fragment都将实现它。
2)让每个Fragment为每个类声明实现接口Add iplements语句:
3)在每个片段中实现接口方法为了检查它是否真的如预期的那样工作,我将只记录方法调用并显示吐司:
4)在ViewPager页面更改上调用接口方法您可以在ViewPager上设置OnPageChangeListener,并在ViewPager每次显示另一个页面时获得回调:
5)实现OnPageChangeListener以调用自定义生命周期方法
侦听器知道新的位置,并可以在PagerAdapter的帮助下调用新片段上的接口方法。我可以在这里为新片段调用onResumeFragment(),并为当前片段调用onPauseFragment()。
我还需要存储当前片段的位置(最初的当前位置等于0),因为我不知道用户是从左到右滚动还是从右到左滚动。
我没有写代码。完整的教程在这里:http://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/
kcwpcxri2#
如果您的片段扩展了android.support.v4.app.Fragment
你可以用这个,我用得上
lnvxswe23#
使用者方法pager.setOffscreenPageLimit(numbr)来设定您要在堆栈中保留多少个片段。
qyyhg6bp4#
覆写
setUserVisibleHint()
。这个方法会在片段对使用者可见时呼叫。jchrr9hc5#
Override**setUserVisibleHint()**当片段对用户可见时将调用
fae0ux8s6#
解决您的问题:
jpfvwuh47#
在片段之间滑动时,不会调用片段的生命周期方法。您可以使用
ViewPager.SimpleOnPageChangeListener
来解决这个问题。示例代码如下(在Kotlin中)。xqk2d5yq8#
您可以将此方法放在寻呼适配器内。
然后,在页面更改侦听器中,您可以获取当前片段,并在片段中运行方法。
特殊不要使用adapter.getItem(position).,因为它返回一个片段的新示例。