当onItemClickedListener工作时,ListView中的Android CheckBox不可单击

时间:2014-04-16 16:34:19

标签: android listview android-listview focus android-checkbox

我在ListView的行项目中使用CheckBox。将CheckBox设置为android:focusable="false"。因此ListView的OnItemClickListener正常工作,但checkBox似乎无法点击。我该如何解决这个问题?

在我的自定义arrayAdapter中:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        FileHolder holder;
        if(v == null){
            LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
            v = inflater.inflate(layoutResourceId, parent, false);
            holder = new FileHolder();
            holder.isChecked = (CheckBox)v.findViewById(R.id.checkBox1);
            v.setTag(holder);
            holder.isChecked.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    Log.d("common", "checked");
                }

            });
        }
}

在row_item.xml中:

<CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" 
        android:button="@drawable/checkbox"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="true"/>

编辑:我尝试注册OnTouchListener,但也没有调用onTouch()。

1 个答案:

答案 0 :(得分:1)

我不认为你应该将focusable和focusableInTouchMode设置为false。 在夸大布局

时尝试将父级设置为null
v = inflater.inflate(layoutResourceId, null, false);

希望它会有所帮助。

此外,我认为如果您的列表很长,您将遇到性能问题。如果列表中有很多行,则不鼓励在new OnClickListener(){}上创建getView(int position, View convertView, ViewGroup parent) {}。在侦听器实例上创建为所有行设置它。您可以使用标记来确定单击哪个视图。