Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager第2页未更新_Android_Android Viewpager - Fatal编程技术网

Android ViewPager第2页未更新

Android ViewPager第2页未更新,android,android-viewpager,Android,Android Viewpager,我正在开发一个多项选择题测试应用程序,它有一个ViewPager,每个页面上都有一个问题(可能包含图像)和可能的答案的片段,并且由于一些带有文本的图像可能很难阅读,我添加了一个“自制的”带有javascript的缩放功能,在问题webview绘制完成后,点击一个按钮即可动态修改css(我已经放弃了pinch to zoom,因为它在不同的Android版本之间有许多不兼容之处),而且工作得很好,我在顶部有两个带+和-的放大镜图标,点击后,它们在webview上启动javascript,实现缩放效

我正在开发一个多项选择题测试应用程序,它有一个ViewPager,每个页面上都有一个问题(可能包含图像)和可能的答案的片段,并且由于一些带有文本的图像可能很难阅读,我添加了一个“自制的”带有javascript的缩放功能,在问题webview绘制完成后,点击一个按钮即可动态修改css(我已经放弃了pinch to zoom,因为它在不同的Android版本之间有许多不兼容之处),而且工作得很好,我在顶部有两个带+和-的放大镜图标,点击后,它们在webview上启动javascript,实现缩放效果,缩放因子存储在共享设置中,以便在每个页面选择上应用“默认缩放”

我的目标是,一旦缩放因子被更改,您移动到下一页,它将保留并应用该缩放因子,并且它正在工作,但不在第2页上,该页将以默认缩放显示

我猜这个问题与ViewPager屏幕外缓存有关(奇怪的是,我尝试了三个问题的测试,你改变了第一页的缩放,移到第二页,缩放没有改变,移到第三页,缩放按我的意愿应用,但很奇怪!)因此,我尝试使用viewPager.setOffScreenPAgeLimit(0)禁用该缓存,但它不起作用。我还尝试了接下来的两段代码(分别),但都没有用,所以我被卡住了,任何帮助都将不胜感激

提前谢谢

PS.最奇怪的是,如果我设置了一个断点,并用Javascript调试该行,但webview没有更新,我将粘贴下面讨论的行作为参考:

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,但不起作用:(