Tôi gặp sự cố khủng khiếp và không thể sửa lỗi này trong ba giờ qua. Vì vậy, tôi cần giúp đỡ. Im tạo PlayerUI giống như trong Play Âm nhạc. Hoạt động có một ViewPager và chuẩn bị danh sách các mảnh dựa trên các bản nhạc trong PlayLists và cho phép người dùng chuyển từ bản nhạc này sang bản nhạc khác bằng cách vuốt hoặc các nút Tiếp theo và Trước đó trên Giao diện người dùng mảnh.SetCurrentItem trên ViewPager đang gây ra ngoại lệ
Chức năng vuốt đều hoạt động tốt. Và trong các nút trước và tiếp theo, tôi gọi setCurrentItem trên viewPager và tăng hoặc giảm số đếm dựa trên giá trị từ getCurrentItem từ viewPager. Vấn đề là các công trình tiếp theo tốt tuy nhiên ném một ngoại lệ khi tôi nhấn tiếp theo trên mục trước khi mục cuối cùng. Và tương tự với nút trước đó. Nó hoạt động tuyệt vời tuy nhiên nó ném một ngoại lệ khi tôi nhấp vào trước đó trên mảnh thứ hai.
Đây là log lỗi của tôi ::
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)
Đây là mã cho hoạt động của tôi, mảnh vỡ là danh sách các mảnh vỡ mà tôi đặt nó trên quan điểm pager
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),fragments);
adapter.setTrackList(trackList);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(0);
viewPager.setCurrentItem(currentTrack.getPosition());
Khi người dùng nhấp chuột vào các nút Tiếp theo và Trước đó (nằm trong các đoạn) Tôi chỉ cần thực hiện một trong những điều sau đây
((PlayerActivity)getActivity()).viewPager.setCurrentItem(((PlayerActivity)getActivity()).viewPager.getCurrentItem()+1);
((PlayerActivity)getActivity()).viewPager.setCurrentItem(((PlayerActivity)getActivity()).viewPager.getCurrentItem()-1);
Điều gì có thể là vấn đề?
Không sử dụng viewPager.getCurrentItem() tại đoạn. Nó chỉ hoạt động ở FragmentActivity, – eurosecom
@eurosecom không chính xác, nó hoạt động ở phân mảnh. – EyadMhanna
@ user983327 bạn có chắc chắn không nằm ngoài giới hạn số lượng phân đoạn trong chế độ xem không? – EyadMhanna