【问题标题】:Refreshing Listview's ArrayAdapter with the remove method throws UnsupportedOperationException [duplicate]使用 remove 方法刷新 Listview 的 ArrayAdapter 会引发 UnsupportedOperationException [重复]
【发布时间】:2012-11-11 06:24:33
【问题描述】:

我想从ListView 中删除数据。对于长按事件,我使用了以下代码:

      lstGame.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
            AlertDialog.Builder builder = new AlertDialog.Builder(FavouriteActivity.this);
            builder.setMessage("Remove from Favourite?").setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Const.favourite(FavouriteActivity.this, (args[arg2]));
                                Toast.makeText(FavouriteActivity.this, "Selected Item Removed from Favourite.", Toast.LENGTH_LONG).show();
                                // Here I get the UnsupportedException---->
                                // adapter.remove(args[arg2]);
                                lstGame.setAdapter(adapter);
                                lstGame.invalidate();

                        }
                    }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });
            Dialog alert = builder.create();
            alert.show();
            return false;
        }
    });

为什么会出现这个异常?

【问题讨论】:

    标签: android adapter android-arrayadapter


    【解决方案1】:

    如果适配器 引用指向默认的ArrayAdapter 实例,那么您很可能使用array 对象作为其数据源来实例化ArrayAdapter。如果是这种情况,那么在后台,ArrayAdapter 会将该数组转换为特殊的ArrayList(不是普通的 java 数组)。这个特殊的ArrayList 没有实现改变其大小的方法(因此在ArrayAdapter 上使用addremove(修改该列表)之类的方法将抛出UnsupportedOperationException),它只允许您可以修改其中的值。

    如果您想使用 remove 方法,请将您当前在 ArrayAdapter 中使用的 array 中的数据放入 ArrayList 中,然后将该列表传递给 ArrayAdapter 构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2016-07-30
      相关资源
      最近更新 更多