Android资源在页面上未找到异常已滚动

Android资源在页面上未找到异常已滚动,android,android-fragments,android-viewpager,android-adapter,Android,Android Fragments,Android Viewpager,Android Adapter,在onPageScrolled方法中尝试更改ViewPager中的页面背景时,我遇到了以下异常。为了使问题更清楚,我对其进行了编辑 android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.content.res.Resources.getValue(

onPageScrolled
方法中尝试更改
ViewPager
中的页面背景时,我遇到了以下异常。为了使问题更清楚,我对其进行了编辑

android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                            at android.content.res.Resources.getValue(Resources.java:1245)
                                                                            at android.content.res.Resources.getColor(Resources.java:899)
                                                                            at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:413)
                                                                            at com.noel.material_onboarding.OnboardingActivity.color(OnboardingActivity.java:113)
                                                                            at com.noel.material_onboarding.OnboardingActivity.access$200(OnboardingActivity.java:29)
                                                                            at com.noel.material_onboarding.OnboardingActivity$1.onPageScrolled(OnboardingActivity.java:86)
首先,我创建滑块对象,这包括设置背景颜色:

addSlide(new SlideFragmentBuilder()
            .description("This is a test")
            .backgroundColor(R.color.colorPrimary)
            .build());
    addSlide(new SlideFragmentBuilder()
            .description("This is a test 2")
            .backgroundColor(R.color.green)
            .build());
    addSlide(new SlideFragmentBuilder()
            .description("This is a test 3")
            .backgroundColor(R.color.orange)
            .build());
    addSlide(new SlideFragmentBuilder()
            .description("This is a test 4")
            .backgroundColor(R.color.orange)
            .build());
这里有一个指向github上的和

以下是我的onPageScrolled方法:

 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
           int colorUpdate = (Integer) evaluator.evaluate(positionOffset,  color(mOnboardingAdapter.getItem(position).backgroundColor()), color(mOnboardingAdapter.getItem(position + 1).backgroundColor()));
            mViewPager.setBackgroundColor(colorUpdate);


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(colorUpdate);
            }
        }

        @Override
        public void onPageSelected(int position) {
            btnFinish.setVisibility(position == mOnboardingAdapter.getLastItemPosition() ? View.VISIBLE : View.GONE);
            btnNext.setVisibility(position == mOnboardingAdapter.getLastItemPosition() ? View.GONE : View.VISIBLE);

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
使用的color()方法

private int color(@ColorRes int color){
    return ContextCompat.getColor(this, color);

}
基本上,当用户滑动到另一个页面时,我只需要一个页面的背景淡入即可。

尝试使用此选项

Color.parseColor(mOnboardingAdapter.getItem(position + 1));
不要忘记删除整数强制转换

(Integer)
我认为

mOnboardingAdapter.getItem(position + 1)

是否为空值(未初始化)

正常,因此我查看了文档,发现了一个我遗漏的重要内容:

int:当前显示的第一页的位置索引。如果positionOffset不为零,页面位置+1将可见

基本上,positionOffset归零后,应用程序在第二个屏幕上崩溃了。看,这就是它的工作原理: 在第一个屏幕上,positionOffset为零,页面的位置也为零,但是由于positionOffset为零,位置+1不可用。我通过添加以下语句来检查偏移量是否为零来解决此问题:

positionOffset != 0.0 ? position + 1 : position
以下是onPageScrolled方法的外观:

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

           int colorUpdate = (Integer) evaluator.evaluate(positionOffset,  color(mOnboardingAdapter.getItem(position).backgroundColor()), color(mOnboardingAdapter.getItem(positionOffset != 0.0 ? position + 1 : position).backgroundColor()));
            mViewPager.setBackgroundColor(colorUpdate);


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(colorUpdate);
            }
        }

您调用了
color(0)
,错误表明它对
mOnboardingAdapter不满意。getItem(position+1)
似乎有其属性,该属性由
backgroundColor()返回。
未初始化hi@cricket\u 007您能详细解释一下吗,我已经在问题中添加了更多的信息,以使问题更加清楚,我将如何在+1位置初始化项目?我只是指出错误所说的内容。。。整数为0,未找到该资源。添加一些日志语句以进行调试。我甚至不确定您是否正确获得了颜色嗨,您能告诉我如何初始化此
mOnboardingAdapter.getItem(position+1)
我已用更多信息更新了问题,希望这个帮助你能告诉我为什么你用的是addOnPageChangeListener而不是OnPageChangeListener??我认为它是getItemPosition(position);not getItem()getItemPosition()将返回项的位置,我需要的是getItem(position),以便在该位置返回片段对象。然后可以使用该对象获取背景色。确定@NoelOmondi然后必须使用实例,public static OnboardingFragment newInstance(SlideFragmentBuilder,int position)传递位置{}