0

我正在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

4 回答 4

4

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

listview.setItemsCanFocus(false);

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

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

有了这个,你的setOnItemClickListener()意志就会被召唤

于 2014-09-01T14:27:08.400 回答
3

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

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

并使用里面的实例onItemClick()

CheckBox checkbox = (CheckBox) v.getTag(R.id.check);

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

于 2012-07-31T09:59:05.403 回答
1

不要使用 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 的开关兼容性。

于 2012-07-31T09:53:28.840 回答
0

列表项中的可聚焦视图可防止在onListItemClick()单击ListActivity列表项时触发。但是用onListItemClick()可以达到的效果OnClickListener在此处阅读有关此的更多信息

于 2012-07-31T10:05:12.540 回答