查看寻呼机和片段生命周期

我有一个ViewPager,一次加载三个页面。 如果我从第1页到第2页再扫描到第3页,则第一页(片段)转到onPause() 。 然后,如果我滑动到第二页,即使页面1仍然对用户不可见,第一页也会转到onResume() 。 所以,我的问题是:如何区分代码中的第一页和第二页? 例如,如果我必须在片段可见时运行一段代码,那该怎么办?

除了显示的片段之外,FragmentPagerAdapter还将其他片段保持在恢复状态。 解决方案是实现自定义OnPageChangeListener并为显示片段时创建新方法。

1)创建LifecycleManager接口该接口将有两个方法,每个ViewPager的Fragment将实现它。 这些方法如下:

 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 

3)在每个片段中实现接口方法为了检查它是否真的按预期工作,我将只记录方法调用并显示Toast:

 @Override public void onPauseFragment() { Log.i(TAG, "onPauseFragment()"); Toast.makeText(getActivity(), "onPauseFragment():" + TAG, Toast.LENGTH_SHORT).show(); } @Override public void onResumeFragment() { Log.i(TAG, "onResumeFragment()"); Toast.makeText(getActivity(), "onResumeFragment():" + TAG, Toast.LENGTH_SHORT).show(); } 

4)调用ViewPager页面上的接口方法更改您可以在ViewPager上设置OnPageChangeListener,并在每次ViewPager显示另一个页面时获取回调:

 pager.setOnPageChangeListener(pageChangeListener); 

5)实现OnPageChangeListener以调用自定义生命周期方法

监听器知道新位置,并可以在PagerAdapter的帮助下调用新Fragment上的接口方法。 我可以在这里调用onResumeFragment()来获取当前新片段和onPauseFragment()。

我还需要存储当前片段的位置(最初当前位置等于0),因为我不知道用户是从左向右还是从右向左滚动。 看看我在代码中的意思:

 private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { int currentPosition = 0; @Override public void onPageSelected(int newPosition) { FragmentLifecycle fragmentToShow = (FragmentLifecycle)pageAdapter.getItem(newPosition); fragmentToShow.onResumeFragment(); FragmentLifecycle fragmentToHide = (FragmentLifecycle)pageAdapter.getItem(currentPosition); fragmentToHide.onPauseFragment(); currentPosition = newPosition; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageScrollStateChanged(int arg0) { } }; 

我没有写代码。 完整的教程: http : //looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/

如果你的Fragment扩展android.support.v4.app.Fragment

你可以使用它,它适合我。

 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (!isVisibleToUser) { //do sth.. } } 

覆盖setUserVisibleHint() 。 一旦片段对用户可见,此方法将调用。

用户方法pager.setOffscreenPageLimit(numbr)用于设置堆栈中要保留的片段数。

覆盖setUserVisibleHint(),当片段对用户可见时,这将调用