Почему мои кнопки остаются нажатыми? - PullRequest
1 голос
/ 21 марта 2010

В своей деятельности я отвечаю на onClick (), заменяя текущее представление новым (setContentView ()). По какой-то причине, когда я делаю это, а затем возвращаюсь к исходному виду, кнопка, которую я первоначально нажал, все еще выглядит как нажатая.

Если вы как-то «обновите» его (например, прокрутите его с помощью трекбола), то он вернется в состояние без нажатия. Это как если бы кнопка не получала событие «touch-up».

Странная вещь: это происходит только на моем T-Mobile Pulse (Android 1.5). Это не происходит на эмуляторе.

Я пытался вызвать invalidate () / postInvalidate () для представления, когда я его показываю, но это не имеет никакого эффекта.

Ответы [ 2 ]

3 голосов
/ 21 марта 2010

Я предполагаю, что ваше событие "подкраски" перейдет к вашему новому представлению контента.

Вы можете либо:

  • Не звоните setContentView() вообще в onClick(), используя другие средства для достижения ваших целей пользовательского интерфейса (несколько действий, ViewFlipper и т. Д.).
  • Не звоните setContentView() немедленно в onClick(), а вместо post() a Runnable, что вызовет setContentView(). Это должно поместить замену представления контента в очередь событий после события «touch-up».

Лично я не большой поклонник тех, кто постоянно звонит setContentView(), так как я беспокоюсь об утечках памяти и чрезмерно полных действиях, затрудняющих управление состоянием и памятью. Например, предположим, что вы вызываете setContentView() для вашей исходной раскладки (A), затем вызываете setContentView() для вашей новой раскладки (B), затем пользователь поворачивает экран. По умолчанию Android onSaveInstanceState() поможет вам с B - вешая на EditText содержимое и тому подобное - но для A, вы по своему усмотрению.

1 голос
/ 21 марта 2010

Похоже, что onClick() выполняется до того, как представление кнопки возвращается в исходное состояние без щелчка, и поскольку вы удаляете представление до того, как это произойдет, оно сохраняет свое нажатое состояние. Вы можете попробовать что-то вроде запроса фокуса с другим предметом во время onClick(). Тем не менее, повторный вызов setContentView() на экране звучит немного странно. Вы уверены, что не должны использовать другой Activity? Это решило бы проблему с состоянием кнопки.

...