RecyclerViewEnhanced icon indicating copy to clipboard operation
RecyclerViewEnhanced copied to clipboard

NullPointerException With multiple viewtypes

Open jaydipsensussoft opened this issue 6 years ago • 3 comments

I am trying to make a recyclerview having multiple(2) viewtypes. The first view is for header and second one is for items inside particular header. I want to make headers unswipable and items are swipables. i used setUnSwipeableRows method for achieve this behaviour but this does not work. It crashes when i swipe/click on my header view. The full logcat of exception is as below.

10-03 09:32:56.358 3979-3979/com.jsonexample E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.jsonexample, PID: 3979
    java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getHeight()' on a null object reference
        at com.nikhilpanju.recyclerviewenhanced.RecyclerTouchListener.handleTouchEvent(RecyclerTouchListener.java:521)
        at com.nikhilpanju.recyclerviewenhanced.RecyclerTouchListener.onInterceptTouchEvent(RecyclerTouchListener.java:153)
        at android.support.v7.widget.RecyclerView.dispatchOnItemTouchIntercept(RecyclerView.java:2821)
        at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:2867)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2059)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
        at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
        at android.view.View.dispatchPointerEvent(View.java:8578)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:143)
        at android.os.Looper.loop(Looper.java:122)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        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:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)```

jaydipsensussoft avatar Oct 03 '18 04:10 jaydipsensussoft

To avoid this issue could be enough to have a method to update unswipable cell after getting RecyclerView data and updating adapter. Is there any way to update this dynamically?

riki-dexter avatar Apr 05 '19 10:04 riki-dexter

Replace your dispatchTouchEvent with below code

@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (touchListener != null) { try { touchListener.getTouchCoordinates(ev); return super.dispatchTouchEvent(ev); } catch (Exception e) { return false; } } else { return super.dispatchTouchEvent(ev); } }

satti8893 avatar Mar 03 '22 17:03 satti8893

这是来自QQ邮箱的假期自动回复邮件。您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

esirong avatar Mar 03 '22 17:03 esirong