ListView onTouch MotionEvent

У меня есть список ListView. Написал обработчик касаний. Когда вы касаетесь пункта меню (ACTION_DOWN), я его выделяю. При отпускании предмета (ACTION_UP) - возвращает исходный цвет. Проблема в том, что если коснуться и прокрутить - то и пункт подсвечивается. Или если вы коснетесь и переместите палец на другой элемент.

public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
    holder.tv_name_exercise.setTextColor(Color.parseColor("#fe9503"));
    holder.tv_description_exercise.setTextColor(Color.parseColor("#ffffff"));
    holder.row.setBackgroundResource(R.drawable.list_item_bg_active);
    }
if (event.getAction()==MotionEvent.ACTION_UP) {
    holder.tv_name_exercise.setTextColor(Color.parseColor("#000000"));
    holder.tv_description_exercise.setTextColor(Color.parseColor("#666667"));
    holder.row.setBackgroundResource(R.drawable.list_item_bg);
    }}

person T_E_M_A    schedule 12.07.2014    source источник


Ответы (1)


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

res/color/exercise_color.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fe9503" />
    <item android:color="#000000"/>
</selector>

res/drawable/row_bg.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/list_item_bg_active" />
    <item android:color="@drawable/list_item_bg"/>
</selector>
person alanv    schedule 13.07.2014
comment
Я пробовал оба. С фоном работает. С текстом работать не хочет. ‹item android:color=#000000/› — работает, но state_pressed=true не работает. Вот почему я попытался использовать MotionEvent. - person T_E_M_A; 13.07.2014
comment
Не могли бы вы попробовать установить android:duplicateParentState=true в TextViews? - person alanv; 14.07.2014
comment
Да, в TextView. С android:duplicateParentState=true - работает. Сенкс! - person T_E_M_A; 22.07.2014