gpt4 book ai didi

android - ViewPager 上的 SetCurrentItem 导致异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:05 28 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,并且在过去的三个小时内无法解决这个问题。所以我需要帮助。我正在创建一个类似于 Play Music 中的 PlayerUI。该 Activity 有一个 ViewPager 并根据播放列表中的轨道准备 fragment 列表,并允许用户使用 fragment UI 上的滑动或 Next 和 Previous 按钮从一个轨道切换到另一个轨道。

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

这是我的错误日志::

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)

这是我的 Activity 的代码,fragments 是我在 View 分页器上设置的 fragment 列表

ViewPagerAdapter adapter = new       ViewPagerAdapter(getSupportFragmentManager(),fragments);
adapter.setTrackList(trackList);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(0);
viewPager.setCurrentItem(currentTrack.getPosition());

当用户单击 Next 和 Previous 按钮(在 fragment 中)时,我只需执行以下操作之一

((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。请引用以下链接

https://code.google.com/p/android/issues/detail?id=75309

Android ViewPager setCurrentItem not working after onResume

setCurrentItem after setting adapter on GridViewPager return NPE

关于android - ViewPager 上的 SetCurrentItem 导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com