【问题标题】:Android force close on using Swipe to Dismiss ListviewAndroid 强制关闭使用 Swipe 来关闭 Listview
【发布时间】:2014-11-19 17:58:32
【问题描述】:

我正在使用 swipe-to-dismiss 库,但应用程序在列表项被刷掉后崩溃。我正在使用以下代码:

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

谢谢!

【问题讨论】:

    标签: android android-listview android-adapter


    【解决方案1】:

    您通过调用使用对象数组而不是 List 的构造函数之一来创建 ArrayAdapter,或者将不可变的 List 传递给它。

    尝试调用其中一个接受 List 的 ArrayAdapter 构造函数,并确保传递给它一个可变的。这将允许您执行删除操作。

    在内部,接受对象数组的 ArrayAdapter 构造函数将通过在对象数组上调用 Arrays.asList(T... array) 从对象数组中创建一个 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)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多