Как выделить элемент ListView на ощупь? - PullRequest
11 голосов
/ 09 марта 2011

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

ListView xml:

<ListView
    android:id="@+id/list_view"     
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:divider="#206600"
    android:dividerHeight="2dp"
    android:smoothScrollbar="true"
    android:background="#ffffff"
    >
</ListView>

И код моего адаптера:

private class MyAdapter extends ArrayAdapter<Task> {
        private LayoutInflater mInflater;

        public MyAdapter(Context context, int resource, List<Task> list) {
            super(context, resource, list);
            mInflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                v = mInflater.inflate(R.layout.list_item, null);
            }

            Task task = taskList.get(position);

            /* Setup views from your layout using data in Object here */

            return v;
        }

Ответы [ 4 ]

23 голосов
/ 09 марта 2011

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

РЕДАКТИРОВАТЬ: Если вы действительно должны иметь непрозрачный фон для состояния по умолчанию и не хотите использовать drawSelectorOnTop, вы также можете попробовать это: Установите фон в строках списка, но используйте StateListDrawable для использования @android:drawable/list_selector_background для всех, кроме состояния по умолчанию (для этого вы можете определить xml-файл в папке drawables; см. StateList документация ).

Вы также можете вложить макет внутри внешнего фонового макета строки с фоном, установленным в @android:drawable/list_selector_background; таким образом фон будет рисоваться поверх вашего фона, но под содержимым.

2 голосов
/ 09 марта 2011

ListView s не сохраняют визуальную индикацию фокусировки (или выбора) в режиме касания.Это можно увидеть только при использовании аппаратной клавиатуры или элементов управления для навигации по пользовательскому интерфейсу.

Подробнее см. Статью в блоге Google Touch Mode Android.

Итак,если вы используете только сенсорный режим, вы никогда не увидите фокус или выделение на ListView с.

0 голосов
/ 15 октября 2013

Я боролся с этим в течение нескольких дней. В конце я должен создать виджет, который поддерживает интерфейс Checkable, и вернуть этот виджет / представление в функцию getiew() моего адаптера. И просмотр списка должен быть в ListView.CHOICE_MODE_SINGLE (или, возможно, в любом другом режиме, указанном android:choiceMode), чтобы он мог отслеживать выбор, сделанный в пользовательском интерфейсе.

Таким образом, по существу, все перечисленное должно быть на месте, чтобы элемент списка оставался выделенным:

  1. ListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  2. ListAdapter.getView() возвращает представление, которое реализует Checkable интерфейс
  3. ListView.OnItemClickListener должен вызвать setItemChecked(position, true), чтобы отметить проверяемый элемент (и, таким образом, выделить его в списке)

Надеюсь, это поможет кому-то, кто также борется с этим.

0 голосов
/ 09 марта 2011

Я считаю, что это связано с атрибутом «Включено» элементов в ListAdapter.

Если ваш адаптер содержит код:

@Override
public boolean areAllItemsEnabled() {
    return true;
}

Тогда каждый элемент должен быть активным(и поэтому следует выделить при прикосновении).

Не могли бы вы опубликовать детали (и, возможно, код) того, какой тип адаптера вы используете для этого списка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...