Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Android 复选框';使用“performClick”时,未正确显示的状态_Android_Listview_Checkbox - Fatal编程技术网

Android 复选框';使用“performClick”时,未正确显示的状态

Android 复选框';使用“performClick”时,未正确显示的状态,android,listview,checkbox,Android,Listview,Checkbox,我遇到了一个棘手的问题: 在我的应用程序中,有一个列表(使用列表视图),每个项目都包含文本和与右侧对齐的复选框。 现在,单击复选框本身就可以了,我为它安装了一个处理程序(OnClickListener),并执行一个内部操作。复选框的可见状态与预期一样-第一次单击勾号时,再次单击勾号将消失 现在我只想将可点击区域“扩展”到完整的列表条目-我的方法是使用ListView.setOnItemClickListener()安装一个OnItemClickListener,并在该侦听器中执行以下操作: re

我遇到了一个棘手的问题:

在我的应用程序中,有一个列表(使用列表视图),每个项目都包含文本和与右侧对齐的复选框。 现在,单击复选框本身就可以了,我为它安装了一个处理程序(
OnClickListener
),并执行一个内部操作。复选框的可见状态与预期一样-第一次单击勾号时,再次单击勾号将消失

现在我只想将可点击区域“扩展”到完整的列表条目-我的方法是使用
ListView.setOnItemClickListener()
安装一个
OnItemClickListener
,并在该侦听器中执行以下操作:

resultView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
            checkBox.performClick();
        }
    });
resultView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
CheckBox=(CheckBox)view.findViewById(R.id.CheckBox);
checkBox.performClick();
}
});
这听起来很简单,但是有时(不是每次)复选框中的勾号不会出现在后面!我添加了一个
复选框。invalidate()
,但这没有帮助

如何使复选框对单击完整列表条目项作出“反应”???
谢谢

而不是使用
performClick()
使用
checkBox.setChecked(!checkBox.getChecked())取而代之
performClick()
将导致再次调用
onClickListener
,这可能会导致递归,这可以解释您看到的奇怪行为。

而不是使用
performClick()
使用
复选框。setChecked(!checkBox.getChecked())取而代之
performClick()
将导致再次调用
onClickListener
,这可能会导致递归,从而解释您看到的奇怪行为。

@Override
@Override
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
        // TODO Auto-generated method stub
        CheckBox cb = (CheckBox) v.findViewById(R.id.chkSelected);
        TextView tv = (TextView) v.findViewById(R.id.tvName);
//        pi = (PackageInfo) arg0.getItemAtPosition(position);
        cb.performClick();
        if (cb.isChecked()) {
            checkedValue.add(tv.getText().toString());
        } else if (!cb.isChecked()) {
            checkedValue.remove(tv.getText().toString());
        }
    }
public void onItemClick(AdapterView arg0,视图v,内部位置,长arg3){ //TODO自动生成的方法存根 复选框cb=(复选框)v.findViewById(R.id.chkSelected); TextView电视=(TextView)v.findviewbyd(R.id.tvName); //pi=(PackageInfo)arg0.getItemAtPosition(位置); cb.performClick(); if(cb.isChecked()){ checkedValue.add(tv.getText().toString()); }如果(!cb.isChecked()){ checkedValue.remove(tv.getText().toString()); } }
@覆盖
public void onItemClick(AdapterView arg0,视图v,内部位置,长arg3){
//TODO自动生成的方法存根
复选框cb=(复选框)v.findViewById(R.id.chkSelected);
TextView电视=(TextView)v.findviewbyd(R.id.tvName);
//pi=(PackageInfo)arg0.getItemAtPosition(位置);
cb.performClick();
if(cb.isChecked()){
checkedValue.add(tv.getText().toString());
}如果(!cb.isChecked()){
checkedValue.remove(tv.getText().toString());
}
}

是否已将复选框的属性android:focusable和android:clickable设置为false?这会将clickevent引用到复选框的父项,在本例中,您的列表项是否已将复选框的属性android:focusable和android:clickable设置为false?这会将clickevent引用到复选框的父项,在本例中,您的列表项我尝试过这样做-但奇怪的是,这根本不会更改复选框的状态。。。另外:我需要执行的操作没有完成,因为根本没有调用侦听器。我应该手动调用我的侦听器吗?奇怪:如果我同时调用这两个函数,首先是setChecked(),然后是performClick(),并设置断点,那么setChecked不会调用onClickListener(如预期的那样),但是performClick会调用-BIG,但是:检查状态不正确!使用setChecked将其设置为true,并调试到performClick调用的侦听器中,状态仍然为false!为什么?进一步考虑一下,在
ListView/mclickliester
中更改状态时可能会出现一些奇怪的行为,我认为这是因为代码完成后会进行处理。我必须实现自己的适配器,在该适配器中使用稳定的ID,在
onCreateView
中的每个视图的复选框中添加一个
onClickListener
,并根据项目的稳定id是否包含在列表视图中的
getCheckedItemIds
中,在
onCreateView
中设置复选框的选中状态。Mark,感谢您的建议!我重新设计了我的整个设置,复选框现在只显示状态,它们不再是可点击或可聚焦的-所有操作都在侦听器中执行。这很有效。我被搞砸了,因为当你有两个听众时发生了复杂的事情!我尝试过这样做-但奇怪的是,这根本不会改变复选框的状态。。。另外:我需要执行的操作没有完成,因为根本没有调用侦听器。我应该手动调用我的侦听器吗?奇怪:如果我同时调用这两个函数,首先是setChecked(),然后是performClick(),并设置断点,那么setChecked不会调用onClickListener(如预期的那样),但是performClick会调用-BIG,但是:检查状态不正确!使用setChecked将其设置为true,并调试到performClick调用的侦听器中,状态仍然为false!为什么?进一步考虑一下,在
ListView/mclickliester
中更改状态时可能会出现一些奇怪的行为,我认为这是因为代码完成后会进行处理。我必须实现自己的适配器,在该适配器中使用稳定的ID,在
onCreateView
中的每个视图的复选框中添加一个
onClickListener
,并根据项目的稳定id是否包含在列表视图的
getCheckedItemIds
中,在
onCreateView
中设置复选框的选中状态。Mark,感谢您的建议