Skip to content Skip to sidebar Skip to footer

Android :: Ontouchlistener && Onclicklistener Combination Issue

Problem description: I have a TextView on a RelativeLayout and I want to color it red when the user touches it, and go on another page when he clicks on it. So I tried to set an O

Solution 1:

you may call View.performClick() when action_up. Hope it helps.

your_txtView.setOnClickListener(newTextView.OnClickListener(){
        publicvoidonClick(View v) {
            // TODO Auto-generated method stub

        }
    });

    your_txtView.setOnTouchListener(newTextView.OnTouchListener(){
            @OverridepublicbooleanonTouch(View v, MotionEvent event) {
        if (MotionEvent.ACTION_DOWN == event.getAction()) {

        } elseif (MotionEvent.ACTION_UP == event.getAction()) {
            v.performClick();
        }

        returntrue;
    }
    });

Solution 2:

Adel, is the problem with the first click, or you don't get any click at all?

There is this issue if you have multiple clickable layout you don't get any click events for the first. That's because it makes it first selected and then you get the click event, try the below code.

privateclassCustomTouchListenerimplementsOnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        TextView tv = (TextView) v.findViewById(R.id.single_line_text);
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            tv.setTextColor(COLOR_WHEN_PRESSED);
        } elseif (event.getAction() == MotionEvent.ACTION_UP) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
            // Action of click goes here
        } elseif (event.getAction() == MotionEvent.ACTION_CANCEL) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
                            // To handle release outside the layout region
        }
        returnfalse;
    }
}

This is working in my current implementation if you set the touch listener for your layout.

You also need to set below on your layout

android:focusable="true"android:focusableInTouchMode="true"android:clickable="true"

Hope it helps!!!

EDIT: Additionally, there should be a flag in both DOWN and UP. Set it in DOWN and check if its set in UP. This will avoid a bug where user might tap anywhere in the screen and then hover on your textview and release it.

Solution 3:

Had the same problem. Solved it by returning false from ACTION_MOVE. I've been fighting with it for few hours, trying various things, but seems like i've kept overlooking this little issue... And now it makes sense. When you return true from onTouch, futher processing is stopped, so that OnClickListener is not aware of any movements and triggers onClick even after pointer have moved outside of view.

Post a Comment for "Android :: Ontouchlistener && Onclicklistener Combination Issue"