Я пытаюсь использовать selector
, чтобы выделить выделенную строку в моем ListView
. Мне нужно, чтобы он был выделен после того, как я выпустил прессу. Символирование выделенной строки - это выбранная строка.Селектор не работает для ListView внутри фрагмента
В настоящее время текст поменяет цвет по умолчанию. Мне нужно изменить цвет фона.
У меня есть ListView
во фрагменте, который находится внутри DrawerLayout
. Когда я выбираю устройство, DrawerLayout
закрывается. Когда я снова открою DrawerLayout
, фон выбранного устройства i не будет изменен. Текст выбранного устройства - это другой цвет, но не фон.
Я пробовал множество предложений здесь, на SO и ничего не нашел, что работает. Я нацелен на API-17, а minsdk - API-17.
Вот несколько сообщений, которые я пробовал без успеха.
- ListView Item Selected State not working
- Change background color of selected item on a ListView
- Android ListView selected item stay highlighted
Позвольте мне знать, если вам нужны какие-либо дополнительные подробности, спасибо.
Вот мой код (с последней вещи я пытался):
device_list_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/device_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:background="@drawable/device_selector" >
</ListView>
device_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:drawable="@drawable/device_selected"/>
<item
android:drawable="@drawable/device_not_selected"/>
</selector>
strings.xml
<drawable name="device_selected">#777777</drawable>
<drawable name="device_not_selected">#555555</drawable>
DeviceListFragment
public class DeviceListFragment extends Fragment implements OnItemClickListener {
public View onCreateView(...) {
View view = inflater.inflate(R.layout.device_list_fragment, container, false);
this.devicesArrayAdapter = new DevicesArrayAdapter(this.getActivity());
this.deviceListView = (ListView) view.findViewById(R.id.device_list_view);
this.deviceListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
this.deviceListView.setAdapter(this.devicesArrayAdapter);
this.deviceListView.setOnItemClickListener(this);
return view;
}
public void onItemClick(...) {
this.deviceListView.setItemChecked(position, true);
}
}
DevicesArrayAdapter
public class DevicesArrayAdapter extends ArrayAdapter<Device> {
public View getView(...) {
View rowView = layoutInflater.inflate(R.layout.device_element, parent, false);
return rowView;
}
}
Я думал, что цель выбора заключается в оказании помощи в изменяющихся частях зрения на основе по какому типу отбора? Просто использование селектора не позволит сохранить изменения? – prolink007
Хорошо. Я сделал это. Единственный способ, которым это работает для меня, - сделать вызов 'myArrayAdapter.notifyDataSetChanged();' в методе 'onItemClick()'. Это верно? – prolink007
Я решил пойти с решением, которое у меня уже было, что было похоже на это решение.Это не совсем то, чего я ожидал, но сейчас это будет работать. Спасибо – prolink007