多项选择ListView和按钮:焦点问题

时间:2011-03-09 13:25:25

标签: android

我对Android很新,我正在尝试使用自定义多项选择列表视图,其项目定义如下:

<?xml version="1.0" encoding="utf-8"?>
<com.jroy.android.views.CheckableLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="left|center_vertical">
    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/checkbox_selector"
        android:button="@null" />
    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />
    <Button
        android:id="@+id/btn_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/button_view_selector" />
</com.jroy.android.views.CheckableLinearLayout>

ListView的选择模式设置为'multipleChoice',CheckableLinearLayout是LinearLayout的子类,它以下列方式实现Checkable接口:

public class CheckableLinearLayout extends LinearLayout implements Checkable {

    private Checkable mCheckable;                  

    @Override
    protected void onFinishInflate() {

        super.onFinishInflate();

        // Find checkable view
        for (int i = 0, childCount = getChildCount(); i < childCount; ++i) {
            View v = getChildAt(i);
            if (v instanceof Checkable) {
                mCheckable = (Checkable) v;
                v.setFocusable(false);
                v.setClickable(false);
                break;
            }
        }

    }

    public CheckableLinearLayout(Context context) {
        super(context);
    }

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

    @Override
    public boolean isChecked() {
        return (mCheckable != null)
                ? mCheckable.isChecked()
                : false;
    }

    @Override
    public void setChecked(boolean checked) {
        if (mCheckable != null) {
            mCheckable.setChecked(checked);
        }
    }

    @Override
    public void toggle() {
        if (mCheckable != null) {
            mCheckable.toggle();
        }
    }

}

问题是我无法检查任何项目,似乎按钮只能有焦点。我尝试了关于焦点的不同事情,但我没有设法让它正常工作......

我尝试实现目标的正确方法是什么? 谢谢,

1 个答案:

答案 0 :(得分:3)

将行内的所有控件设置为“无法对焦”。现在情况并非如此,因为Button没有实现Checkable,因此您的布局中没有setFocusable(false)

        for (int i = 0, childCount = getChildCount(); i < childCount; ++i) {
            View v = getChildAt(i);
            v.setFocusable(false);
            if (v instanceof Checkable) {
                mCheckable = (Checkable) v;
                v.setClickable(false);
                break;
            }
        }