无法显示片段实例编号

时间:2016-10-08 14:49:09

标签: java android-studio android-fragments

我一直在关注本教程:https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html  关于如何使用fragmentstatepageradapters。 它运行良好,但我似乎无法使用ArrayListFragment的实例编号。 在本教程中,这一位显示实例编号作为标题:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_pager_list, container, false);
        View tv = v.findViewById(R.id.text);
        ((TextView)tv).setText("Fragment #" + mNum);
...

当我启动应用程序时,第一个屏幕显示片段0.当我滑动到下一个屏幕时,它显示片段1,依此类推。 但是,当我添加这个:

Log.i("instancenumber", Integer.toString(mNum));

((TextView)tv)...下面,日志显示

instancenumber 0

instancenumber 1

当我在触摸任何东西之前启动应用程序时,当我向右滑动它切换到2时,当我滑到最后一个时它没有记录任何内容并且以某种方式倒退也不会更新正确。

我猜测我没有正确理解实例编号的概念或onCreateView方法。 如何获得正确的实例编号?它似乎适用于textview。

提前感谢,

hach​​el

PS:上下文:我需要这个数字,因为我有一个mp3播放,我希望它播放得更快(通过增加实例数来计算播放速度),当我滑到下一个屏幕时我也会显示一个新图像

2 个答案:

答案 0 :(得分:0)

FragmentStatePagerAdapter始终会创建当前视图和下一个视图,因此即使只显示第一个视图,它也会将onCreateView调用到第一个和下一个视图。

这样做可以提高性能,当您滚动到下一个视图时,视图已经创建,Android可以正确显示。滚动到第二个视图时,将调用第三个视图的onCreateView

您可以使用PagerAdapter设置setOffscreenPageLimit将在内存中保留多少片段,此问题中有更多信息:ViewPager FragmentStatePagerAdapter keep more than three fragments in memory

答案 1 :(得分:0)

在jonathanrz的帮助下,我设法让它像这样工作:

mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            public void onPageScrollStateChanged(int state) {}
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

            public void onPageSelected(int position) {
                Log.i("int", Integer.toString(mPager.getCurrentItem()));
            }
        });