2015-07-14 2 views
0

Итак, у меня есть селектор в представлении списка, где каждая строка имеет 2 text views, и каждый текстовый вид имеет другой селектор в синхронизации (различные чертежи для тех же состояний: activated и pressed) с одним на список. Моя логика заключается в том, что когда я обнаруживаю, что вы бросаете элемент в виде списка, я временно меняю цвет фона этого представления и после 500 мс возвращает его в прозрачный.ListView Как очистить выбор

Но, когда он сбрасывается, дочерний вид имеет свое нажатое состояние, равное true, а иногда и не так, как у представления есть правильный bg, но внутренний text views всегда соответствует их activated drawables, даже если нажатое состояние является ложным.

Я не могу понять, как исправить это поведение. Любая помощь очень ценится, эта вещь меня заводит.

Я пробовал выбор очистки, который не помогает, я даже попытался явно принудительно установить дочерний вид для установки false для его активированного состояния и нажатого состояния, которое также не делает goo. У меня действительно не хватает вариантов.

+0

Пробовал ли вы ListView.clearChoices(); '? – Machado

+0

@Machado yup Это было первое, что я пробовал – trpride

+0

Вы пытались опубликовать обновление в виде списка? что-то вроде getListView().post (new Runnable() { @Override public void run() { // делаем здесь } }); –

ответ

0

Итак, потратив много времени на анализ того, что происходит за кулисами, в AbsListView Я нашел обходной путь для решения этой проблемы. Во-первых больше на проблеме, которая была причиной этого, то AbsListView имеет 8 состояний для обнаружения движения а именно -

  1. TOUCH_MODE_REST (-1)
  2. TOUCH_MODE_DOWN (0)
  3. TOUCH_MODE_TAP (1)
  4. TOUCH_MODE_DONE_WAITING (2)
  5. TOUCH_MODE_SCROLL (3)
  6. TOUCH_MODE_FLING (4)
  7. TOUCH_MODE_OVERSCROLL (5)
  8. TOUCH_MODE_OVERFLING (6)

и когда ACTION_UP событие было быть посланным в списке как-то его touchMode был застрять между (2) и (5), заставляя его вспомнить ее в нажатом состоянии на motionView(Child view), который вызывал неправильные результаты, т. е. нажатое состояние было видимым, даже когда движение закончилось.

Я не мог понять, почему эта проблема была в первую очередь, поскольку я всегда отправлял мероприятие с моего TouchListener на ListView.

Во всяком случае в настоящее время работа вокруг для таких случаев -

Когда мой GestureDetector распознает жест он возвращает истину, так что все я должен был сделать, когда GestureDetector возвращается Истинные просто изменить действие, MotionEvent «s для ACTION_CANCEL и отправки это до ListView и вуаля, проблема решена.

Смежные вопросы