Изменить цвет текста в listView с помощью кнопок - PullRequest
1 голос
/ 21 октября 2011

Я создаю ListView с кнопками и у меня возникают некоторые проблемы.
Моя активность должна выполнять 2 различных действия для каждого действия (ItemClick и buttonClick).

Я предположил, что:

1 - Поскольку у меня есть кнопка на элементах списка, я не могу использовать OnItemClickListener(). Правильно?

Итак, я создаю макет для элементов списка и делаю его кликабельным.

listitem_textview_button.xml:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@drawable/selector_list_item">

<Button 
    android:id="@+id/listitem_textview_button_btn"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:text="@string/edit" />

<TextView
    android:id="@+id/listitem_textview_button_txv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:textSize="14sp"
    android:textColor="@drawable/selector_textview"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:layout_toRightOf="@+id/listitem_single_line_w_button_btn" />

</RelativeLayout>

Обратите внимание, что я создал селектор для макета и stateColorList для Textview.

selector_list_item.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_window_focused="false"
        android:drawable="@color/transparent" />

    <item 
        android:state_focused="true" 
        android:state_enabled="false"
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_disabled" />

    <item 
        android:state_focused="true" 
        android:state_enabled="false"
        android:drawable="@drawable/shape_list_item_disabled" />

    <item 
        android:state_focused="true" 
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_transition" />

    <item
        android:state_focused="false" 
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_transition" />

    <item 
        android:state_focused="true"
        android:drawable="@drawable/shape_list_item_focus" />
</selector>

selector_textview.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true" android:color="@color/black" />
   <item android:state_focused="true" android:color="@color/black" />
   <item android:state_pressed="true" android:color="@color/black" />
   <item android:color="@color/red" />
</selector>

2 - Это лучший способ реализовать ListView с пользовательскими элементами (включая цвета TextView)?

Приведенный выше код не меняет цвет textViews, когда я нажимаю на элементы.

В некоторых тестах я видел, что цвет текста меняется, когда:
1. Использование стрелок эмулятора. 2. Удаление кнопки элемента ListView.

Где проблема?

prinscreens: список, выбранный стрелкой устройства (текст черный, ok !)

listitem selected by emulator arrow

listitem нажал пальцем (текст красный, должен быть черным, fail )

listitem clicked by finger(using device)

Ответ:

добавить android:duplicateParentState="true" в TextView.

1 Ответ

1 голос
/ 24 октября 2011

Я не понимаю, ваш макет кликабелен, но у вас есть кнопки?Является ли кнопка выбора строки?

Если бы я был на вашем месте, я бы не сделал ничего кликабельным, кроме кнопки.android: focusable = "false" android: clickable = "false"

Затем вы можете в слушателе кнопки установить выбор в строке вручную:

getListView().setSelection(position);

Дайте мне знать, если это работает.

[РЕДАКТИРОВАТЬ] Реальная проблема заключается в том, что TextView должен быть активным, а не макет.

...