CheckBox和setOnItemClickListener在android中不起作用

时间:2012-07-31 09:44:19

标签: android listview checkbox onitemclicklistener

我正在使用ListView CheckBox。我只选择了一个CheckBox,但它会使用ScrollView自动选为多行。

示例代码(此代码完美运行)

       holder.checkbox.setOnClickListener( new OnClickListener()
        {
            public void onClick( View v )
            {
                CheckBox cb = ( CheckBox ) v;
                if ( cb.isChecked() )
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

但是当我使用setOnItemClickListener时,它无效。

示例代码(此代码对我不起作用)

        listview.setOnItemClickListener( new OnItemClickListener() 
        {
            public void onItemClick( AdapterView<?> parent, final View v, final int position, long id ) 
            {
                holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
                if ( holder.checkbox.isChecked() )
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

我可以弄错的地方。如何避免这个CheckBox选择。

你能帮帮我吗?

4 个答案:

答案 0 :(得分:3)

您可以使用onItemClick()setTag()getTag()内获取CheckBox的实例。您可以在getView()方法中将CheckBox实例设置为

convertView.setTag(R.id.check, viewHolder.checkbox);

使用

获取onItemClick()内的实例
CheckBox checkbox = (CheckBox) v.getTag(R.id.check);

如果您有任何进一步的查询,可以查看my blog post

答案 1 :(得分:3)

要使列表视图具有焦点,请从项目本身中移除焦点。 在实例化listview之后添加以下内容:

listview.setItemsCanFocus(false);

然后将以下内容添加到list_item.xml

<CheckBox
    android:id="@+id/lock_File_CheckBox"
    android:focusable="false"
    android:focusableInTouchMode="false"/>

这样,您的setOnItemClickListener()将被调用

答案 2 :(得分:0)

不要使用onClick。使用OnCheckedChange

holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if (isChecked) {
                doSomethingWithCheckedState(compoundButton);
            } else {
                doSomethingWithUnCheckedState(compoundButton);
            }
        }
    });

请记住,CheckBox继承自CompoundButton,以实现ICS的交换机兼容性。

答案 3 :(得分:0)

列表项中的可聚焦视图可防止在单击列表项时在onListItemClick()中触发ListActivity。但onListItemClick()可以实现OnClickListener的效果。阅读here有关此内容的更多信息