Android ViewPager第2页未更新
我正在开发一个多项选择题测试应用程序,它有一个ViewPager,每个页面上都有一个问题(可能包含图像)和可能的答案的片段,并且由于一些带有文本的图像可能很难阅读,我添加了一个“自制的”带有javascript的缩放功能,在问题webview绘制完成后,点击一个按钮即可动态修改css(我已经放弃了pinch to zoom,因为它在不同的Android版本之间有许多不兼容之处),而且工作得很好,我在顶部有两个带+和-的放大镜图标,点击后,它们在webview上启动javascript,实现缩放效果,缩放因子存储在共享设置中,以便在每个页面选择上应用“默认缩放” 我的目标是,一旦缩放因子被更改,您移动到下一页,它将保留并应用该缩放因子,并且它正在工作,但不在第2页上,该页将以默认缩放显示 我猜这个问题与ViewPager屏幕外缓存有关(奇怪的是,我尝试了三个问题的测试,你改变了第一页的缩放,移到第二页,缩放没有改变,移到第三页,缩放按我的意愿应用,但很奇怪!)因此,我尝试使用viewPager.setOffScreenPAgeLimit(0)禁用该缓存,但它不起作用。我还尝试了接下来的两段代码(分别),但都没有用,所以我被卡住了,任何帮助都将不胜感激 提前谢谢 PS.最奇怪的是,如果我设置了一个断点,并用Javascript调试该行,但webview没有更新,我将粘贴下面讨论的行作为参考:Android ViewPager第2页未更新,android,android-viewpager,Android,Android Viewpager,我正在开发一个多项选择题测试应用程序,它有一个ViewPager,每个页面上都有一个问题(可能包含图像)和可能的答案的片段,并且由于一些带有文本的图像可能很难阅读,我添加了一个“自制的”带有javascript的缩放功能,在问题webview绘制完成后,点击一个按钮即可动态修改css(我已经放弃了pinch to zoom,因为它在不同的Android版本之间有许多不兼容之处),而且工作得很好,我在顶部有两个带+和-的放大镜图标,点击后,它们在webview上启动javascript,实现缩放效
webViewQuestion.loadUrl("javascript:$('img').css('width', '" + newScaleFactor + "%');" +
"newFontSize=1*" + newScaleFactor + "/100;" +
"strNewFontSize=newFontSize.toString()+'em';" +
"$('#content').css('font-size',strNewFontSize);");
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mViewPager.invalidate();
mSectionsPagerAdapter.notifyDataSetChanged();
}
@Override
public void onPageSelected(int position) {
if(position==1){
mViewPager.invalidate();
mSectionsPagerAdapter.notifyDataSetChanged();
}
}
编辑1:
好的,问题不在于我之前说过的第2页,而是我点击缩放按钮的页面后面的页面,因为它是缓存的页面
目前,我用下一个代码解决了这个问题,它运行得很好,我知道返回位置\u NONE这是一个非常糟糕的做法,因为它重新绘制了所有的片段,事实上,我的视图非常复杂,我注意到每个屏幕被重新绘制的延迟,但我所做的是设置一个静态变量,指示哪里需要重画(我在点击缩放按钮后将其设置为true,在onPageSelected中将其设置为false,如下所示)。目前正在工作,但无论如何,我希望有人能想出一个更好的解决方案
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public void onPageSelected(int position) {
if(mustRedraw){
mSectionsPagerAdapter.notifyDataSetChanged();
mViewPager.invalidate();
mustRedraw=false;
}
您是否尝试过使用
viewpager.setOffScreenPageLimit(1)
我在@Akhil使用了它,尝试了0和1,但不起作用:(