2010-07-29 3 views
2

Я создал пользовательский вид, который по сути является объектом галереи, который можно скрыть и показать (используя View.VISIBLE и View.GONE), нажав на TextView.View State lost with click

Изображения, которые я размещаю в этой галерее, имеют пользовательский фон StateListDrawable. Все работает отлично, за исключением того, что состояние изображений в галерее кажется затерянным, когда галерея переходит из View.GONE в View.VISIBLE и что выбранный селектор является допустимым по умолчанию (translucent_box).

Эти элементы в моем селекторного XML:

 
<item android:drawable="@drawable/red_box" android:state_pressed="true" /> 
<item android:drawable="@drawable/orange_box" android:state_selected="true" android:state_focused="true" /> 
<item android:drawable="@drawable/blue_box" android:state_selected="true" /> 
<item android:drawable="@drawable/translucent_box" /> 

Самое странное в том, что после возвращения из вызова startActivity, состояние же восстанавливается, и все отображается нормально, пока я не скрывать и показывать галерею снова.

Я попытался сыграть с добавлением разных состояний в селектор и программным образом попытаться обновить представление ... безрезультатно.

Любые идеи? Я уверен, что это должно быть что-то тривиальное ...

Заранее спасибо!

+0

Не можете ли вы получить сфокусированный/выбранный вид, когда виджет виден, сохранить его и повторно применить, когда вы вернетесь в видимое состояние? – Sephy

+0

Я играл с попыткой сделать это, но безрезультатно ... отсюда и причина вопроса. Кроме того, из того, что я мог сказать, есть способ установить выбранное состояние, но не сфокусированное состояние ... – Justin

ответ

0

Мне удалось найти обходное решение для моего дела. Я не уверен, что это лучший способ, и я до сих пор не знаю, что вызывает поведение, но я смог получить то, что хотел, вызвав notifyDataSetChanged() в адаптере моей галереи.

Если у кого-то есть лучшее предложение о том, как решить проблему (похоже, что это может быть немного перебор) или даже описание того, почему это происходит, я был бы признателен ... Мне очень любопытно, что происходит за кулисами.

0

Я не уверен, что это релевантно - но вам нужно реализовать View.verifyDrawable? Документы не очень понятны, когда вам нужно это делать.

startActivity инициирует анимацию по умолчанию - возможно, это то, что заставляет представление правильно обновляться. Другой возможный взлом вокруг этого - вызвать пустую анимацию.

+0

Спасибо за предложение, но после переопределения этого метода я шагнул через отладчик и этот метод никогда не вызывал. – Justin