Обновление ArrayAdapter Listview с помощью метода remove вызывает исключение UnsupportedOperationException

Я хочу удалить данные из 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;
        }
    });

Почему я получил это исключение?


person Panchal Amit    schedule 11.11.2012    source источник
comment
пожалуйста, поделитесь журналами logcat ..   -  person Praful Bhatnagar    schedule 11.11.2012


Ответы (1)


Если ссылка адаптера указывает на экземпляр ArrayAdapter по умолчанию, то вы, скорее всего, создаете экземпляр ArrayAdapter, используя array объектов в качестве источника данных. Если это так, то под капотом ArrayAdapter преобразует этот массив в специальный ArrayList (не обычный java). Этот специальный ArrayList не реализует методы, которые изменяют его размер (поэтому использование таких методов, как add или remove (которые изменяют этот список) в ArrayAdapter, вызовет UnsupportedOperationException), это позволит вам только изменять значения в нем.

Если вы хотите использовать этот метод remove, поместите данные из array, которые вы в настоящее время используете в ArrayAdapter, в ArrayList, а затем передайте этот список конструктору ArrayAdapter.

person user    schedule 11.11.2012