Получить событие Click на setOnTouchListener

Я работаю в приложении для Android и хочу получить событие щелчка в setOnTouchListener текстового представления внутри пользовательского списка. Когда я возвращаю true из setOnTouchListener, я правильно получаю событие щелчка, но прокрутка ListView не будет работать в этой части текстового представления, потому что у меня уже есть другое событие щелчка в этом ListView, и я уже переопределил ListView setOnTouchListener.

ListView setOnTouchListener

convertView.setOnTouchListener (новый OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (IsTablet) {
            if (mDetailList.size() > 3)
                v.getParent().requestDisallowInterceptTouchEvent(true);
        } else {
            if (mDetailList.size() > 2)
                v.getParent().requestDisallowInterceptTouchEvent(true);
        }
        return false;

    }
});

TextView setOnTouchListener

private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mDownX = ev.getX();
            mDownY = ev.getY();
            isOnClick = true;
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (isOnClick) {
                Log.i(LOG_TAG, "onClick ");
                //TODO onClick code
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
                Log.i(LOG_TAG, "movement detected");
                isOnClick = false;
            }
            break;
        default:
            break;
    }
    return true;
}

Есть ли способ получить событие щелчка, вернув false из TextView setOnTouchListener, или, пожалуйста, предложите мне другое решение этой проблемы.


comment
Используйте setOnClickListener в текстовом представлении. ScrollView позволяет кликать по своему содержимому. Чтобы изменить события, проходящие через представления, переопределите onInterceptTouchEvent из ScrollView.   -  person S.D.    schedule 21.12.2014
comment
@С.Д. Я использовал его в текстовом представлении...   -  person Arun    schedule 21.12.2014
comment
Если я слежу за вами, думаю, вам нужно расширить ListView и поместить некоторую логику в onInterceptTouchEvent(), чтобы различать свайпы вверх/вниз, которые переходят к ListView, и простые касания, которые переходят к TextViews. [Эта страница][1] показывает, как тестировать свайпы вверх/вниз с помощью MotionEvent, который вы получаете как часть метода onInterceptTouchEvent(). [1]: codetheory.in/   -  person JASON G PETERSON    schedule 21.12.2014
comment
@JASONGPETERSON Отлично .. Ваше решение работает !!!!   -  person Arun    schedule 22.12.2014
comment
Рад это слышать, чувак!   -  person JASON G PETERSON    schedule 22.12.2014


Ответы (1)


Я нашел решение для моего собственного вопроса.

Вместо переопределения setOnTouchListener в ListView я создал собственный ListView и переопределил событие onInterceptTouchEvent внутри пользовательского ListView.

Пожалуйста, смотрите код ниже:

public class CustomListView extends ListView {

    public CustomListView(Context context,
            List<DetailSummaryMonth> detailSummaryMonths) {
        super(context);
        init(context);

    }

    public CustomListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public CustomListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(Context context) {

    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        if (getAdapter().getCount() > 3)

            getParent().requestDisallowInterceptTouchEvent(true);

        return super.onInterceptTouchEvent(ev);
    }

}
person Arun    schedule 22.12.2014