state_checkable не работает на представлении, расширяющем проверяемый - PullRequest
2 голосов
/ 17 февраля 2012

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

Я расширил класс View, который использует drawable с интерфейсом Checkable, и это работает нормально.

Однако, когда я фильтрую только на state_checkable, он отображает изображение со значением false. Я предполагаю, что это означает, что с моей реализацией что-то не так.

<item android:drawable="@drawable/button_6_default" android:state_checkable="false" />
<item android:drawable="@drawable/button_disable_default" android:state_checkable="true" />

Как заставить state_checkable и state_checked работать правильно?

Ответы [ 2 ]

2 голосов
/ 13 октября 2013

Расширение предыдущего ответа для всех, кому может понадобиться фактический код для метода onCreateDrawableState. Это извлечено из этой библиотеки: https://github.com/ManuelPeinado/MultiChoiceAdapter

private static final int[] CHECKED_STATE_SET = {
  android.R.attr.state_checked
};

@Override
protected int[] onCreateDrawableState(int extraSpace) {
  final int[] drawableState = super.onCreateDrawableState(extraSpace + 2);
  if (isChecked) {
       mergeDrawableStates(drawableState, CHECKED_STATE_SET);
  }
  return drawableState;
}
1 голос
/ 20 февраля 2012

Я понял это. Вам нужно реализовать onCreateDrawableState и добавить атрибут att_checked, если представление проверяется после вызова super с увеличенным количеством добавленных вами дополнительных атрибутов. У меня больше нет кода, извините.

...