我正在使用滑动到解除库,但是在刷掉列表项之后应用程序崩溃了。我使用以下代码:
todolist = (ListView)findViewById(R.id.todo_items);
SwipeDismissListViewTouchListener touchListener =
new SwipeDismissListViewTouchListener(
todolist,
new SwipeDismissListViewTouchListener.DismissCallbacks() {
@Override
public boolean canDismiss(int position) {
return true;
}
@Override
public void onDismiss(ListView listView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
mAdapter.remove(mAdapter.getItem(position));
}
mAdapter.notifyDataSetChanged();
}
});
todolist.setOnTouchListener(touchListener);
todolist.setOnScrollListener(touchListener.makeScrollListener());
该应用在此行中提供了UnsupportedoperationException:
com.example.todolist.ToDoListActivity$1.onDismiss(ToDoListActivity.java:81)
我该如何解决这个问题?我指的是这个代码示例:
谢谢!
答案 0 :(得分:2)
您通过调用其中一个带有对象数组而不是List的构造函数来创建ArrayAdapter,或者您传递了一个不可变的List。
尝试调用其中一个带有List的ArrayAdapter构造函数,并确保将其传递给一个可变的构造函数。这将允许您执行删除操作。
在内部,采用对象数组的ArrayAdapter构造函数将通过在其上调用Arrays.asList(T ...数组)来创建对象数组中的List,但List Arrays.asList返回是不可变的。
例如,请考虑以下数据:
String[] FRUIT = {"Apple", "Banana", "Pear"};
以下两个都将创建将抛出UnsupportedOperationException的适配器:
new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, FRUIT);
new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, Arrays.asList(FRUIT));
虽然这个允许您修改适配器的列表:
new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(FRUIT)));