使用remove方法刷新Listview的ArrayAdapter会抛出UnsupportedOperationException

时间:2012-11-11 06:24:33

标签: android adapter android-arrayadapter

我想从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;
        }
    });

为什么我会得到那个例外?

1 个答案:

答案 0 :(得分:1)

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

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