setItemChecked не работает на Gingerbread

Я использую следующий селектор, чтобы изменить внешний вид текста в элементе listView:


     
     
     
     
     

Весь селектор прекрасно работает в более поздних версиях Android (ICS, JB), но в Gingerbread, пока элемент нажимается_state применяется правильно, когда я вызываю setItemChecked в listView, элемент state_checked нет применяется.

Код, который я использую для установки элемента, выглядит следующим образом:

@Override
protected void onResume()
{
    super.onResume();

    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    for (int index = 0; index < measureList.size(); index++)
    {
        if (measureList.get(index).getId() == appContext.getMeasureId())
        {
            getListView().setItemChecked(index, true);
        }
    }
}

и XML, используемый для установки селектора:


кто-нибудь знает, почему это произошло? У меня нетЯ пока не тестировал его на версиях Android между GB и ICS, но отредактирую этот пост, как только я это сделаю.

 head in the codes12 июн. 2013 г., 21:23
Извините за то, что так быстро сбил вашу идею с Voicu - оказывается, это позволило мне найти решение (ниже)
 Voicu12 июн. 2013 г., 19:22
Проверьте этот вопрос:stackoverflow.com/questions/3742979/...
 head in the codes12 июн. 2013 г., 20:19
Спасибо за совет, но это не таккажется, работает ...

Ответы на вопрос(1)

Решение Вопроса

После небольшого поиска, мне кажется, что причинаstate_checked ISN»т выраженный предварительно сот является тот факт, чтоsetActive метод наView недоступен до уровня API 11. Это означает, что проверенное состояние не распространяется на дочерние представления моего макета.

КЛЮЧ:

Поменять местамиTextView дляCheckedTextViewРаспространение проверенного состояния от родительского представления до детей

1) Был простой переход в XML, и для 2) я изменил код в ответе, связанном с Voicu, чтобы дать следующее:

public class CheckableRelativeLayout extends RelativeLayout implements Checkable
{
    private boolean checked = false;

    public CheckableRelativeLayout(Context context) {
        super(context, null);
    }

    public CheckableRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

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

    @Override
    protected void dispatchSetPressed(boolean pressed)
    {
        super.dispatchSetPressed(pressed);
        setChecked(pressed);
    }

    @Override
    public void setChecked(boolean checked) {
        this.checked = checked;
        for (int index = 0; index < getChildCount(); index++)
        {
            View view = getChildAt(index);
            if (view.getClass().toString().equals(CheckedTextView.class.toString()))
            {
                CheckedTextView checkable = (CheckedTextView)view;
                checkable.setChecked(checked);
                checkable.refreshDrawableState();
            }
        }
        refreshDrawableState();
    }

    public boolean isChecked() {
        return checked;
    }

    public void toggle() {
        checked = !checked;
        refreshDrawableState();
    }

    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            mergeDrawableStates(drawableState, CheckedStateSet);
        }
        return drawableState;
    }

    @Override
    public boolean performClick() {
        return super.performClick();
    }
}
 Baron17 апр. 2014 г., 19:21
Где определен R.attr.state_checked? Должен ли он быть в моем собственном пакете или это действительно атрибут android.R.attr.state_checked? Было бы полезно увидеть ваш импорт или, возможно, связанный файл attr.xml, если он должен быть в моем собственном пакете.
 Taynã Bonaldo22 мая 2014 г., 16:01
@sleeke для будущих вопросов: да, используется атрибут "android.R.attr state_checked. ", Проверено и отлично работает. Спасибо!
 head in the codes23 апр. 2014 г., 19:51
@ Барон: ябоюсь, что так какС тех пор, как я спросил об этом, я уже давно не могу вспомнить, где использовался этот код, и могуне могу найти импортные или XML-файлы для вас, но яЯ почти уверен, что ям со ссылкой на android.R.attr.state_checked, как вы и думали. Хорошая точка зрения на импорт, хотя. Я'Обязательно включу их в будущие вопросы!

Ваш ответ на вопрос