我目前有一个基本的$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
答案 0 :(得分:0)
您是否考虑过getCount()
返回Integer.MAX_VALUE
和newInstance
创建的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())