Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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 删除选中的ListView项_Android_Checkbox_Android Listview - Fatal编程技术网

Android 删除选中的ListView项

Android 删除选中的ListView项,android,checkbox,android-listview,Android,Checkbox,Android Listview,我正在尝试删除选中的ListView项。如果只检查了一个项目,则该功能有效,但如果有两个或三个项目,则应用程序强制关闭。错误日志上显示: E/AndroidRuntime(2173):java.lang.IndexOutOfBoundsException:无效位置2,大小为2 当列表中有三项并删除2项时。有人能帮忙纠正这个错误吗?代码如下: public void delete() { btnDelete = (Button) findViewById(R.id.btnDelet

我正在尝试删除选中的
ListView
项。如果只检查了一个项目,则该功能有效,但如果有两个或三个项目,则应用程序强制关闭。错误日志上显示:

E/AndroidRuntime(2173):java.lang.IndexOutOfBoundsException:无效位置2,大小为2

当列表中有三项并删除2项时。有人能帮忙纠正这个错误吗?代码如下:

    public void delete() {
    btnDelete = (Button) findViewById(R.id.btnDelete);
    btnDelete.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            for (int i = 0; i < list.getChildCount(); i++) {
                View view = list.getChildAt(i);

                 CheckedTextView cv = (CheckedTextView) view.findViewById(R.id.checkList);
                 if(cv.isChecked()){
                    Log.i("DELETE", adapter.getItem(i).toString()+"   "+cv.toString());

                     adapter.remove(adapter.getItem(i));
                 }
                 adapter.notifyDataSetChanged();

            }
           Toast.makeText(getApplicationContext(), "Selected Items Cleared", Toast.LENGTH_SHORT).show();
       }
    });
   }
public void delete(){
btnDelete=(按钮)findViewById(R.id.btnDelete);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
对于(int i=0;i
问题在于for循环。您在for循环中通过
list.getChildCount()
迭代列表视图,该操作不正确。请正确读取Api文档,将其替换为
adapter.getCount()它将解决问题。

这确实有帮助,但现在如果有5项,并且前两项(0和1)已选中;位置0和2被删除,留下1、3和4。我知道发生了什么,但不确定如何纠正。如果检查了0和1位置。在循环中,删除0后1变为0,导致第二次删除2,留下1。确定修复,我必须调整lop以开始从列表的底部向上删除,向顶部或0移动。这就是我将其更改为“for(int i=adapter.getCount()-1;i!=-1;i-)”的原因。当项目添加到列表中时,仍然会出现一些错误,在解决这些错误后会更新代码。但这个问题已经解决了。在Android中删除列表中的选中项是多么困难。