【问题标题】:Deleting checked ListView items删除选中的 ListView 项目
【发布时间】:2012-05-02 17:29:35
【问题描述】:

我正在尝试删除已检查的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();
       }
    });
   }

【问题讨论】:

    标签: android checkbox android-listview


    【解决方案1】:

    问题在于您的 for 循环。您正在通过list.getChildCount() 在for 循环中迭代列表视图,这是不正确的,请正确阅读Api 文档,将其替换为adapter.getCount(); 它将解决问题。

    【讨论】:

    • 这确实有帮助,但现在如果有 5 个项目并且前两个(0 和 1)被选中;位置 0 和 2 被删除,留下 1、3 和 4。我知道发生了什么,但不知道如何更正。
    • 如果选中 0 和 1 位置。在循环中,删除 0 后 1 变为 0,导致第二次删除 2 留下 1。
    • OK 已修复,我必须调整 lop 以从列表的底部开始删除,向顶部或 0 工作。这就是我将其更改为,“ for (int i = adapter. getCount()-1; i !=-1 ; i--) "
    • 当项目被添加到列表时仍然存在一些错误,当发现时会更新代码。但是这个问题已经解决了。
    • 在 Android 中删除列表中选中的项目是多么困难。
    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 2018-12-13
    • 2014-02-11
    • 2012-08-10
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多