0

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

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

4

1 回答 1

1

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

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

于 2012-11-11T09:30:04.197 回答