Android ViewPager第2页未更新

时间:2017-06-13 20:57:02

标签: android android-viewpager

我正在开发一个多选测试应用程序,它有一个ViewPager和一个问题(可能包含图像)的片段和每个页面上可能的答案,因为一些带文字的图像可能难以阅读我已经添加了一个“自制”缩放功能,使用javascript,在绘制问题webview后点击按钮(我放弃了缩放,因为它在不同的Android版本之间存在许多不兼容性),它会动态修改css。工作得很好,我在顶部有两个放大镜图标+和 - 并且点击后他们在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页,它是跟随我点击缩放按钮的页面,它有意义,因为它是缓存的。

目前我用下一个代码解决了它并且运行得很好,我知道返回POSITION_NONE这是一个非常糟糕的做法,因为它重绘了所有片段,事实上在我的情况下我的观点非常复杂,我注意到延迟ev'ry屏幕正在重绘,但我所做的是设置一个静态变量,指示重绘是否必要(在缩放按钮单击后将其设置为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;
    }

0 个答案:

没有答案