Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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上的SetCurrentItem导致异常_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android ViewPager上的SetCurrentItem导致异常

Android ViewPager上的SetCurrentItem导致异常,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个非常严重的问题,在过去三个小时内无法解决。所以我需要帮助。我正在创作一部我喜欢的音乐剧。该活动有一个ViewPager,根据播放列表中的曲目准备片段列表,并允许用户使用滑动或片段UI上的“下一个”和“上一个”按钮从一个曲目切换到另一个曲目 刷卡功能一切正常。在我的上一个和下一个按钮中,我调用viewPager上的setCurrentItem,并根据viewPager中getCurrentItem的值增加或减少计数。问题是“下一个工作正常”,但是当我在最后一个项目之前点击该项目的“下一个”

我有一个非常严重的问题,在过去三个小时内无法解决。所以我需要帮助。我正在创作一部我喜欢的音乐剧。该活动有一个ViewPager,根据播放列表中的曲目准备片段列表,并允许用户使用滑动或片段UI上的“下一个”和“上一个”按钮从一个曲目切换到另一个曲目

刷卡功能一切正常。在我的上一个和下一个按钮中,我调用viewPager上的setCurrentItem,并根据viewPager中getCurrentItem的值增加或减少计数。问题是“下一个工作正常”,但是当我在最后一个项目之前点击该项目的“下一个”时抛出异常。和上一个按钮相同。它工作得很好,但是当我在第二个片段上单击previous时,它会抛出一个异常

这是我的错误日志::

java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3366)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
        at android.view.View.updateDisplayListIfDirty(View.java:14127)
        at android.view.View.getDisplayList(View.java:14189)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
这是我的活动代码,片段是我在查看页面上设置的片段列表

ViewPagerAdapter adapter = new       ViewPagerAdapter(getSupportFragmentManager(),fragments);
adapter.setTrackList(trackList);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(0);
viewPager.setCurrentItem(currentTrack.getPosition());
当用户单击Next和Previous按钮(在片段中)时,我只需执行以下操作之一

((PlayerActivity)getActivity()).viewPager.setCurrentItem(((PlayerActivity)getActivity()).viewPager.getCurrentItem()+1);

((PlayerActivity)getActivity()).viewPager.setCurrentItem(((PlayerActivity)getActivity()).viewPager.getCurrentItem()-1);
可能是什么问题

Runnable dirtyHack = new Runnable() {
        @Override
        public void run() {
            pager.setCurrentItem(2, 0);
        }
    };
    Handler handler = new Handler();
    handler.postDelayed(dirtyHack, 100);

可能布局还没有膨胀,所以我必须等待或获得NPE。请参考以下链接


出现此错误是因为您超出了ViewPager中片段的数量限制,当您处于最后一个项目中并点击“下一步”按钮时,您应该设置currentItem(0)

不要在片段中使用ViewPager.getCurrentItem()。它只适用于FragmentActivity,@eurosecom这不正确,它适用于fragment。@user983327您确定您没有超出viewpager中的片段数的界限吗?这将不起作用。假设我有4个碎片。我在第三个。现在我要去第四个。我调用setCurrentItem并给出第四个的位置。顺便说一句,我使用这个setCurrentItem(getCurrentItem()+1)。所以位置是正确的。错误发生在我从第三位转到第四位时。因此,这样做是正确的,为什么会出现错误是个问题。请参阅下面我关于将调用setCurrentItem的时间延迟100 ms的回答,这对我来说是有效的。ViewPager中的片段数是静态的还是动态的?动态的。。根据上一个活动中的用户选择进行更改。您的问题是相同的,ViewPager中没有返回其中最后一项的方法,因此您应该传递上一个活动中的number of fragments参数,并按照答案中提到的数字进行处理。假设您有四个片段,当您的片段位于第四个片段时,您应该将当前项设置为0