Событие одним касанием переводит все дочерние виды в нажатое состояние - PullRequest
1 голос
/ 10 февраля 2011

Несомненно, это вызвано моим явно неортодоксальным макетом - у меня есть кнопки в LinearLayout в Activity, который помещается ActivityGroup в галерею. ActivityGroup также является реализацией адаптера, и общий эффект - это полноэкранные скользящие, привязывающиеся панели.

Это работает (на самом деле удовольствие), за исключением того, что событие касания на родительском макете переводит все кнопки в нажатое состояние (и любое нажатие снимает состояние). Касание отдельной кнопки доставляется только к этой кнопке.

Кнопки не получают никаких событий, они только меняют состояние.

Я сделал что-то явно не так? Это известная ошибка и существует ли обходной путь?

Любые идеи будут очень признательны.

1 Ответ

4 голосов
/ 10 февраля 2011

Насколько неясна эта проблема, ее решение может пригодиться кому-то еще, поэтому я отвечу на свой вопрос.

Как уже упоминалось, я (неправильно) использую Галерею для создания слайд-панели в виде iPhone. Я делаю это, возвращая окно верхнего уровня Activity, когда Галерея запрашивает у своей реализации Adapter представление.

Типичное использование Галереи приведет к маленьким представлениям, к которым желательно применить событие нажатия - это больше похоже на кнопку, чем на панель. Наше использование означает, что в одном представлении много кнопок, и мы не хотим, чтобы событие нажатия когда-либо применялось глобально.

Так что обойти это было очень легко. Я расширил Gallery и намеренно сломал pointToPosition (int x, int y), каждый раз возвращая INVALID_POSITION. Галерея по-прежнему делает все остальное, что от нее ожидается, но пропускает попытки применить событие касания к любым элементам, кроме себя (чтобы подготовиться к прокрутке или переключению).

Надеюсь, это кому-то полезно.

...