Обновление состояния элемента ListView по катры, когда ребенок нажал


Задача:

У меня есть ListView элемент с относительно сложной компоновкой. Одним из дочерних элементов в представлении элемента списка является TextView со ссылками. TextView может обрабатывать клики по ссылкам, найденным в нем(с помощью Linkify), и имеет OnClickListener, который обрабатывает клики по частям текста, которые не являются ссылками. Слушатель просто получит позицию представления в ListView и выполнит щелчок:

@Override
public void onClick(View v) {
    int position = mListView.getPositionForView(v);
    mListView.performItemClick(v, position, mAdapter.getItemId(position));
}

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

Спасибо!

1 2

1 ответ:

Это сработало.

Установите вид элемента списка clickable и установите его фон в качестве state-list рисоваемого, а также установите addStatesFromChildren в true. Это позволит убедиться, что состояние элемента представления списка изменяется при щелчке любого из его дочерних элементов (предположим, что дочерний элемент является кликабельным).

Однако это приведет к тому, что ListView сам не получит фокус, поэтому вам нужно обработать щелчок, добавив View.OnClickListener к самому элементу списка вместо добавления OnItemClickedListener к ListView.