当用户到达ViewPager的末尾时,如何动态添加片段以启动ViewPager?

时间:2017-03-15 19:41:20

标签: java android dynamic android-viewpager fragmentstatepageradapter

我目前有一个基本的$array = [ 'someField' => '"value"', // double quotes for string if needed 'labelField' => '"label"', // double quotes for string if needed 'boolean' => false, 'numeric' => 5, 'render' => [ 'option' => 'function() { console.log("Hello World!"); console.log(\'Hello World!\'); }', ], ]; echo json_encode_advanced($array); ,它使用{ someField : "value", labelField : "label", boolean : false, numeric : 5, render : { option : function() { console.log("Hello World!"); console.log('Hello World!'); } } } 来初始化片段。

ViewPager从结尾开始并向后滚动(即向左滚动)。

当用户接近FragmentStatePagerAdapter列表的开头时,我希望以编程方式将更多项添加到适配器列表的开头,实质上创建一个无限可滚动的{ {1}}(向左移动)而不会破坏用户的体验(即,当ViewPager上添加了片段时,不会重新加载他们当前的片段)。但是,我无法做到这一点。

目前,我正在检测我的适配器的ViewPager函数何时传递0的位置,填充适配器使用的列表的开头以及更多项目,然后调用ViewPager。然而,发生的情况是位置1处的片段(一旦它进入焦点就触发ViewPager调用)并且0保留在getItem()的开头并且新片段被全部加载秩序

这是我的notifyDataSetChanged()

getItem()

以及我如何初始化ViewPager

FragmentStatePagerAdapter

1 个答案:

答案 0 :(得分:0)

您是否考虑过getCount()返回Integer.MAX_VALUEnewInstance创建的timestampList.get(position%timestampList.size())有点hacky方式?并将初始页面setCurrentItem设置为Integer.MAX_VALUE/2或最近的appriopiate

@Override
public Fragment getItem(int position) {
    return WeeklyMoodFragment.newInstance(
        timestampList.get(position % timestampList.size()));
        //                         ^  here important
}

@Override
public int getCount() {
    return Integer.MAX_VALUE;
}

    ...

moodViewPager.setCurrentItem(Integer.MAX_VALUE/2);
//or 
WeekyMoodFragmentAdapteradapter = new WeekyMoodFragmentAdapter(getChildFragmentManager());
moodViewPager.setAdapter(adapter);
//dividing integers will round
int roundedCount = (Integer.MAX_VALUE/2) / adapter.getCount();
moodViewPager.setCurrentItem(roundedCount * adapter.getCount())