我想从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;
}
});
为什么我会得到那个例外?
答案 0 :(得分:1)
如果适配器引用指向默认的ArrayAdapter
实例,那么您很可能使用ArrayAdapter
个对象作为其数据源来实例化array
。如果是这种情况,那么在引擎盖下,ArrayAdapter
会将该数组转换为特殊的ArrayList
(不是普通的java)。这个特殊的ArrayList
没有实现改变其大小的方法(因此在add
上使用remove
或ArrayAdapter
(修改该列表)等方法会抛出{ {1}}),它只允许您修改其中的值。
如果您要使用UnsupportedOperationException
方法,请将remove
中当前使用的array
数据放入ArrayAdapter
中,然后将该列表传递给ArrayList
ArrayAdapter
构造函数。