Элементы в ListView не долго активируются после установки прослушивателя click в getView () - PullRequest
5 голосов
/ 02 мая 2011

Я искал и не нашел решения (возможно, не использовал правильные ключевые слова).

Итак, у меня есть собственный ListView, его элемент можно перетаскивать, когда по нему долго щелкают. В его элементе есть ImageView и LinearLayout, содержащие два TextView. Действия выполняются при нажатии LinearLayout или ImageView.

Для этого я использовал setOnItemLongClickListener в моем DragListView, который расширяет ListView, чтобы инициировать действие перетаскивания, и onInterceptTouchEvent, чтобы управлять действием перетаскивания.

Затем я создал собственный адаптер, расширяющий BaseAdapter, и переопределил его getView () для реализации дочерних элементов в строке. LinearLayout и ImageView были установлены на OnClickListener.

Проблема в том, что LinearLayout и ImageView могут выполнять свои функции, но onItemLongClick не вызывается.

Слушатель внутри getView ();

    holder.delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
//Do something
}

Для длительного нажатия на элемент (инициатор перетаскивания)

setOnItemLongClickListener(new OnItemLongClickListener() {              

    @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view,
                        int position, long id) {
    //Do something
    }

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Я думаю, что детектор жестов является одним из способов обработки событий. Обычно, однако, детектор жестов используется, когда мы хотим обнаружить жест, а не долгое нажатие.

Причина, по которой onItemLongClick не вызывается, заключается в том, что onClickListener может потреблять событие касания. По этой причине, если вы хотите обработать onItemLongClick, перехватите событие касания и отправьте его в представления, которые вы хотите обработать.

Более подробную информацию вы можете найти по ссылке. http://developer.android.com/guide/topics/ui/ui-events.html

0 голосов
/ 03 мая 2011

Хорошо, только что нашел решение сам. Вместо того, чтобы использовать onItemLongClickListener, я создаю детектор жестов, чтобы обнаружить долгое нажатие. Затем я перезаписываю dispatchTouchEvent и заставляю сначала сканировать для длительного нажатия, затем возвращаю super.dispatchTouchEvent и другие последующие события касания. Предложения все еще приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...