Пользовательский вид с возможностью проверки, который реагирует на селектор

У меня есть группа FrameLayout, которую я хочу проверить/выбрать,

То есть,после щелчка я хотел бы, чтобы FrameLayoutотображался какchecked-при повторном нажатии я бы хотел, чтобы он стал un checked. Более того, я хочу, чтобы эта визуальная очередь описывалась как обычно с помощью <selector>.

Я не могу заставить это работать -Я не уверен, что мне не хватает:

public class CheckableFrameLayout extends FrameLayout implements Checkable {
    private boolean mChecked = false;
    public CheckableFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setChecked(boolean checked) {
        mChecked = checked;
        refreshDrawableState();
    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }
}

КомпоновкаCheckableFrameLayout:

<com.test.view.CheckableFrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/selector_horizontal"
    android:clickable="true" >

Поддерживающий его селектор (selector _horizontal.xml):

<item android:drawable="@drawable/selector_vertical_selected" android:state_pressed="false" android:state_checked="true"/>  
<item android:drawable="@drawable/selector_vertical_pressed" android:state_pressed="true" android:state_checked="false"/>
<item android:drawable="@drawable/selector_vertical_normal" android:state_pressed="false" android:state_checked="false"/>

Используя приведенный выше код, «состояние _нажато» работает нормально, но само представление не проверяется (, а не вызывается код Checkable, обнаруженный с помощью отладки ).

23
задан Graeme 7 August 2012 в 13:20
поделиться