Android强制关闭使用滑动关闭Listview

时间:2014-09-25 04:24:29

标签: android android-listview android-adapter

我正在使用滑动到解除库,但是在刷掉列表项之后应用程序崩溃了。我使用以下代码:

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)

我该如何解决这个问题?我指的是这个代码示例:

https://github.com/romannurik/Android-SwipeToDismiss/blob/master/src/com/example/android/swipedismiss/MainActivity.java

谢谢!

1 个答案:

答案 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)));