SwipeActionAdapter icon indicating copy to clipboard operation
SwipeActionAdapter copied to clipboard

java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.View$OnTouchListener.onTouch(android.view.View, android.view.MotionEvent)' on a null object reference

Open jaredsburrows opened this issue 9 years ago • 5 comments

02-23 17:54:32.444  1926  1926 E AndroidRuntime: FATAL EXCEPTION: main
02-23 17:54:32.444  1926  1926 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.View$OnTouchListener.onTouch(android.view.View, android.view.MotionEvent)' on a null object reference
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.wdullaer.swipeactionadapter.SwipeViewGroup.onInterceptTouchEvent(SwipeViewGroup.java:174)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2108)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.app.Activity.dispatchTouchEvent(Activity.java:2771)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.View.dispatchPointerEvent(View.java:9520)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5896)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6025)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.os.MessageQueue.nativePollOnce(Native Method)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.os.MessageQueue.next(MessageQueue.java:323)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:135)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-23 17:54:32.444  1926  1926 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

jaredsburrows avatar Feb 24 '16 02:02 jaredsburrows

You didn't set a background view?

Without any code, it's more or less impossible for me to help you.

wdullaer avatar Feb 27 '16 21:02 wdullaer

I'm having the same issue. I pretty much just copy and pasted the example code on the git home screen. This is where the issue happens in the SwipeActionAdapter code:

@Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Start tracking the touch when a child is processing it return super.onInterceptTouchEvent(ev) || swipeTouchListener.onTouch(this, ev); }

Here is my code setting up the adapter:

`mAccountAdapter.addBackground(SwipeDirection.DIRECTION_FAR_LEFT, R.layout.row_account_left) .addBackground(SwipeDirection.DIRECTION_FAR_RIGHT, R.layout.row_account_right) .addBackground(SwipeDirection.DIRECTION_NORMAL_LEFT, R.layout.row_account_left) .addBackground(SwipeDirection.DIRECTION_NORMAL_RIGHT, R.layout.row_account_right) .addBackground(SwipeDirection.DIRECTION_NEUTRAL, R.layout.row_account_left);

    mAccountAdapter.setSwipeActionListener(new SwipeActionAdapter.SwipeActionListener(){
        @Override
        public boolean hasActions(int position, SwipeDirection direction){
            if(direction.isLeft()) return true; // Change this to false to disable left swipes
            if(direction.isRight()) return true;
            return false;
        }

        @Override
        public boolean shouldDismiss(int position, SwipeDirection direction){
            // Only dismiss an item when swiping normal left
            return direction == SwipeDirection.DIRECTION_NORMAL_LEFT;
        }

        @Override
        public void onSwipe(int[] positionList, SwipeDirection[] directionList){
            for(int i=0;i<positionList.length;i++) {
                SwipeDirection direction = directionList[i];
                int position = positionList[i];
                String dir = "";

                switch (direction) {
                    case DIRECTION_FAR_LEFT:
                        dir = "Far left";
                        break;
                    case DIRECTION_NORMAL_LEFT:
                        dir = "Left";
                        break;
                    case DIRECTION_FAR_RIGHT:
                        dir = "Far right";
                        break;
                    case DIRECTION_NORMAL_RIGHT:
                        AlertDialog.Builder builder = new AlertDialog.Builder(mHomeActivity);
                        builder.setTitle("Test Dialog").setMessage("You swiped right").create().show();
                        dir = "Right";
                        break;
                }
                Toast.makeText(
                        mHomeActivity,
                        dir + " swipe Action triggered on " + mAccountAdapter.getItem(position),
                        Toast.LENGTH_SHORT
                ).show();
                mAccountAdapter.notifyDataSetChanged();
            }
        }
    });`

moshea444 avatar Jun 27 '16 15:06 moshea444

Does it also happen if you just run the sample app? Does it happen on each swipe? If it doesn't happen with the sample add, could you change the sample app until it does happen?

I can't reproduce this right now, which makes it hard to fix

wdullaer avatar Jun 30 '16 06:06 wdullaer

Same here, any solution?

Hakens avatar Jan 26 '20 09:01 Hakens

In my case, it is because mDownViewGroup is not set in SwipeActionTouchListener:268 because the cast to SwipeViewGroup does not work (It is of type RelativeLayout).

This was due to overriding SwipeActionAdapter and overriding the getView() method in it.

trauchhaupt avatar Jun 15 '22 07:06 trauchhaupt