我对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();
}
}
}
问题是我无法检查任何项目,似乎按钮只能有焦点。我尝试了关于焦点的不同事情,但我没有设法让它正常工作......
我尝试实现目标的正确方法是什么? 谢谢,
答案 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;
}
}