查看寻呼机和片段的生命周期 [英] View pager and fragment lifecycle

查看:116
本文介绍了查看寻呼机和片段的生命周期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a ViewPager that loads three pages at a time. If I swipe from page 1 to page 2 then to 3, the first page(fragment) goes to onPause(). Then, if I swipe to the second page, 1st page comes to onResume() even though the page 1 is still not visible to the user. So, my question is: how to distinguish between the first and second page in code? For example, if I have to run a piece of code when the fragment is visible, how is that done?

推荐答案

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

The FragmentPagerAdapter keeps additional fragments, besides the one shown, in resumed state. The solution is to implement a custom OnPageChangeListener and create a new method for when the fragment is shown.

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

1) Create LifecycleManager Interface The interface will have two methods and each ViewPager’s Fragment will implement it. These methods Are as follows:

public interface FragmentLifecycle {

    public void onPauseFragment();
    public void onResumeFragment();

}

2)让每个Fragment实现接口,为每个类声明添加iplements语句:

2) Let each Fragment implement the interface Add iplements statement for each class declaration:

public class FragmentBlue extends Fragment implements FragmentLifecycle
public class FragmentGreen extends Fragment implements FragmentLifecycle
public class FragmentPink extends Fragment implements FragmentLifecycle

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

3) Implement interface methods in each fragment In order to check that it really works as expected, I will just log the method call and show 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显示另一个页面时获取回调:

4) Call interface methods on ViewPager page change You can set OnPageChangeListener on ViewPager and get callback each time when ViewPager shows another page:

pager.setOnPageChangeListener(pageChangeListener);

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

5) Implement OnPageChangeListener to call your custom Lifecycle methods

Listener知道新位置,并且可以在PagerAdapter的帮助下在new Fragment上调用接口方法.我可以在此处调用onResumeFragment()获取新片段,并在当前片段上调用onPauseFragment().

Listener knows the new position and can call the interface method on new Fragment with the help of PagerAdapter. I can here call onResumeFragment() for new fragment and onPauseFragment() on the current one.

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

I need to store also the current fragment’s position (initially the current position is equal to 0), since I don’t know whether the user scrolled from left to right or from right to left. See what I mean in code:

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-includes-source-code/

I didn't write the code. Full tutorial here: http://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/

这篇关于查看寻呼机和片段的生命周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆