在 ViewPager 的 CustomPagerAdapter 中,在 instantiateItem() 方法中,我尝试创建一个 TextView,然后根据特定条件为每个页面设置不同的文本。文本从页面光标中读取。这是一个代码:
@Override
public Object instantiateItem(ViewGroup collection, int position) {
sc = new ScrollView(context);
sc.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
sc.setFillViewport(true);
tv = new TextView(context);
if(position < count) {
tv.setText(pages.getString(1));
pages.moveToPosition(position);
}else {
tv.setText("LOCKED");
}
tv.setTag(TAG_PAGE + position);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(Color.BLACK);
tv.setTextSize(30);
sc.addView(tv);
((ViewPager) collection).addView(sc);
return sc;
}
但是 ViewPager 的行为并不像预期的那样。第一页和第二页具有相同的文本,其余页面按预期具有“锁定”标志。当我滑入第四页并返回第一页时,第一页包含假定在第二页中的文本。我也尝试使用 myViewPager.setOffscreenPageLimit(numberOfPages) 但它没有帮助。
我找到了这个答案:
"instantiateItem里面,position参数是需要渲染的位置,不是用户看到的当前焦点item的位置,当前显示的view左右的页面需要pre在内存中渲染,以便那些屏幕的动画将是平滑的。”
这对我来说很有意义,但是我怎样才能正确显示页面内容,然后在需要时更新它?请告知是否有不同的方法可以跳过 instantiateItem() 方法,这会给问题带来混乱和混乱。谢谢你。