У меня есть ListFragment, который содержит кнопку в каждом элементе списка. При нажатии кнопки цвет кнопки изменяется (с использованием ресурса Drawable xml). Хотя цвет кнопки изменяется во время события щелчка, ее цвет возвращается к значению по умолчанию после события, т. е. изменение цвета мгновенно наблюдается во время щелчка, а не после него. Я действительно хотел бы, чтобы изменение цвета сохранялось после срабатывания события.
Я пробовал подход к управлению представлениями элементов с помощью метода getView(int position, View convertView, ViewGroup parent) пользовательского адаптера ListFragment (в моем случае SimpleAdapter), где я мог хранить позиции элементов и сохранять фоновое состояние каждого Кнопка. Однако я хотел бы воспроизвести это решение с помощью селекторов.
У меня есть два цвета настроек ресурсов Drawable для нажатых и нажатых состояний каждой кнопки, а также ресурс селектора, который управляет этими состояниями.
Вот мой ресурс для рисования, который манипулирует состояниями цвета:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/clicked_drawable" /> <!-- pressed -->
<item android:state_focused="false" android:state_pressed="false"
android:drawable="@drawable/clicked_drawable" />
<item android:drawable="@drawable/unclicked_drawable" /> <!-- default -->
</selector>
И два ресурса, которые содержат разные цвета, clicked_drawable.xml и unclicked_drawable.xml, по порядку:
<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#F08080"
/>
</shape>
<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#FFB00F"
/>
</shape>
И файл макета для ListFragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:descendantFocusability="blocksDescendants"
android:layout_margin="5dp"
>
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label"
android:gravity="start"
/>
<TextView
android:id="@+id/text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
/>
</LinearLayout>
<Button
android:id="@+id/button_1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/button"
android:layout_margin="2dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:clickable="true"
android:background="@drawable/selector_drawable"
/>
</LinearLayout>
Я не могу решить эту проблему, и любое направление, руководство или решение будут высоко оценены.