Android Listview & Checkbox Issue



每次单击列表视图项时,我都尝试选中我的复选框。我似乎无法让它工作。我已经将代码缩减到我认为导致我的问题:

主要活动.java

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    //What I am trying which does not seem to work
    if(checkBox.isChecked()){
        fld.setToSelected(false);
        Toast.makeText(getApplicationContext(), "Unchecked", Toast.LENGTH_SHORT).show();
    }else{
        fld.setToSelected(true);
        Toast.makeText(getApplicationContext(), "Checked", Toast.LENGTH_SHORT).show();
    }
    handler.removeCallbacks(runnable);
    super.onListItemClick(l, v, position, id);
    AutoCompleteTextView auto = (AutoCompleteTextView) findViewById(R.id.editTextComplete);
    auto.setText("");
    selectedFriend.add(names.get(position));
    names.get(position);
}

朋友列表数据.java

boolean selected = false;
public boolean isSelected() {
    return selected;
}
public void setToSelected(boolean selected) {
    this.selected = selected;
}

朋友基础适配器.java

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyViewHolder mViewHolder;
    if(convertView == null) {
        convertView = inflater.inflate(R.layout.friend_item, null);
        mViewHolder = new MyViewHolder();
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }
    mViewHolder.friendName = detail(convertView, R.id.friendName, myList.get(position).getFriend());
    mViewHolder.checkedName = detail(convertView, R.id.checkedFriend, myList.get(position).isSelected());
    return convertView;
}

private CheckBox detail(View v, int resId, boolean isChecked){
    CheckBox checkBox = (CheckBox)v.findViewById(resId);
    checkBox.setChecked(isChecked);
    return checkBox;
}

friend_item.xml

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkedFriend"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:checked="false"
    android:focusable="false"
    android:clickable="false"/>

感谢所有帮助。如果需要更多代码,请询问。

在你的onListItemClick()中,至少要有这样的代码:

checkBox = (CheckBox) v.findViewById(R.id.checkedFriend);
...
checkBox.setChecked(true);

请注意,我引用参数视图 (v) 以在列表视图行中找到正确的复选框

我知道你正在减少代码,但在这一点上,我们正试图找到错误。因此,在这种情况下,完整代码可能会节省时间。

如果您希望在

单击整个列表项时单击CheckBox,则需要添加android:duplicateParentState="true"

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkedFriend"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:checked="false"
    android:duplicateParentState="true"/>

这样,每次单击列表项时,所有标有 android:duplicateParentState=true 的子项也将收到单击事件。

请注意,如果您的CheckBox嵌套在多个视图组中,则必须为其所属的每个ViewGroup添加 duplicateParentState 标志。

最新更新