【发布时间】:2023-03-18 06:55:02
【问题描述】:
在 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的位置,当前显示视图左右的页面需要在内存中预渲染,以便这些屏幕的动画流畅。"
这对我来说很有意义,但是我怎样才能正确显示页面内容,然后在需要时对其进行更新?请告知是否有不同的方法可以跳过 instantiateItem() 方法,这会给问题带来混乱和混乱。谢谢。
【问题讨论】: