Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓Listview&;复选框问题_Java_Android_Listview - Fatal编程技术网

Java 安卓Listview&;复选框问题

Java 安卓Listview&;复选框问题,java,android,listview,Java,Android,Listview,每次单击listview项目时,我都试图选中复选框。我似乎无法让它工作。我已将代码缩减到我认为导致我的问题的代码: MainActivity.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()){

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

MainActivity.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);

}
FriendListData.java

boolean selected = false;

public boolean isSelected() {
    return selected;
}

public void setToSelected(boolean selected) {
    this.selected = selected;
}
FriendBaseAdapter.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"/>


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

如果希望在单击整个列表项时单击您的
复选框
,则需要添加
android:duplicateParentState=“true”


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

请注意,如果您的
复选框
嵌套在多个视图组中,则必须为每个
视图组
添加
duplicateParentState
标志

在onListItemClick()中,至少有以下代码:

checkBox = (CheckBox) v.findViewById(R.id.checkedFriend);
...
checkBox.setChecked(true);
请注意,我正在引用参数视图(v)以查找Listview行中的正确复选框


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

在MainActivity布局中是否有一个复选框?或者每个列表项一个复选框?@dthacker每个列表项一个复选框。什么不起作用?复选框不改变状态?未检测到“单击”列表项?@Mikel该复选框的状态不变。列表项是可点击的,并且做它应该做的事情。通过修改我的if/else和你的建议,这就成功了!谢谢
checkBox = (CheckBox) v.findViewById(R.id.checkedFriend);
...
checkBox.setChecked(true);