Избегайте ярких вспышек в Android - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть два рисунка, которые используются в качестве фона, чтобы указать состояние (нажата или выбрана) элементов моего списка.Вытянутый Pressed является селектором, но без указания состояния;он подключен через XML, чтобы быть андроидом: listSelector для списка.

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/my_actual_drawable" />
</selector>

Однако выбранный объект рисования применяется кодом, поскольку он сложен, и требуется более одного простого изменения фонового рисования.когда выбран элемент.

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

Одним из решений является использование селектора с состоянием (вот чтоСелекторы предназначены для!):

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/my_actual_drawable" />
</selector>

, но это приводит к неудачному отключению подсветки Pressed до того, как мой код сможет применить выделенную выделенную область, поэтому между двумя состояниями возникает вспышка неприветливости, неважнокак рано в обработчике onItemClick я положил вызов setBackgroundResource.

Другим решением было бы отслеживать не только onItemClick события, но также onTouch события, и обрабатывать все в коде;это, кажется, делает вещи слишком медленными.

Что я могу сделать, чтобы избежать как вспышки, так и состояния двойного выбора?

1 Ответ

1 голос
/ 10 сентября 2010

Я вижу, где вы говорите, что ваша ситуация сложнее, чем просто изменение фона для рисования, поэтому я извиняюсь, если я слишком упрощен.

Почему бы вам не позволить селектору xml обработать все, что он может? Вы должны иметь возможность настроить селектор xml для обработки как нажатых, так и выбранных состояний для изменения фонового ресурса, чтобы избежать появления вспышки и двойного выбора. Я предполагаю, что другие вещи, которые вы делаете в Java, достаточно быстрые, чтобы их не было заметно, если фон не делает странных вещей.

Мне нравится использовать list_selector_background из фреймворка Android и документацию для рисования для списка состояний в качестве моих ссылок для таких вещей, хотя list_selector_background, вероятно, немного сложнее твой должен быть.

...