Intereting Posts
Java.lang.ClassCastException: android.widget.TextView. Почему я получаю это? Предоставляет ли веб-браузер Android возможность загружать фотографии, только что снятые с камеры? Как проверить, расширяется или сгруппирована группа в Android ExpandableListView? Моши против Гссона в андроиде Атрибут «title» уже был определен, если у него есть зависимости от сюжетов Android 1.0.0 Заполнение между иконкой и заголовком ActionBar Можно ли использовать ListView без ListActivity в Mono Android? Запустить BroadCastReceiver ProcessException: ExecException: Process 'command' /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Content/Home/bin/java Пакет NuGet вызывает проблемы в визуальной студии 2015 и Xamarin Как установить край для вертикальной полосы прокрутки с правого края в ListView? Проблемы с распределением памяти с помощью приложения android Где правильно освободить растровое изображение на Android View? Отсутствие активности Исключение при использовании viewpager и фрагментов внутри фрагментов ListView с алфавитом на Android

Ограничение ArrayList для сохранения 10 значений

Я использую ArrayList в моем коде, который заполняется полем EditText но я хочу ограничить ArrayList поэтому он может содержать только 10 значений. После добавления 10 значений, если другой пытается добавить, мне просто нужно его не добавлять в Array . У кого-нибудь есть идеи, как это сделать?

 private static ArrayList<String> playerList = new ArrayList<String>(); 

Solutions Collecting From Web of "Ограничение ArrayList для сохранения 10 значений"

В методе обработчика:

 if(playerList.size() < 10) { // playerList.add } else { // do nothing } 

Редактировать : Ваша ошибка здесь:

 if(playerList.size() < 10) { Button confirm = (Button) findViewById(R.id.add); confirm.setOnClickListener(new OnClickListener() { public void onClick(View v) { EditText playername = (EditText) findViewById(R.id.userinput); playerList.add(playername.getText().toString()); adapter.notifyDataSetChanged(); playername.setText(""); }}); } else { // do nothing } 

Вы должны проверить размер внутри onClickListener , а не снаружи:

  Button confirm = (Button) findViewById(R.id.add); confirm.setOnClickListener(new OnClickListener() { public void onClick(View v) { EditText playername = (EditText) findViewById(R.id.userinput); if(playerList.size() < 10) { playerList.add(playername.getText().toString()); adapter.notifyDataSetChanged(); playername.setText(""); } else { // do nothing } } }); 

Если у вас нет контроля над функцией, которая добавляет элементы в список, вы можете переопределить add ArrayList .

 public class MySizeLimitedArrayList extends ArrayList<Object> { @Override public boolean add(Object e) { if (this.size() < 10) { return super.add(e); } return false; } } 

ArrayList не имеет способа ограничить размер; Вы можете расширить его, включив в него ограничение:

 public class FixedSizeLimitedArrayList extends ArrayList<Object> { @Override public boolean add(Object o) { int n=10; if (this.size() < n) { return super.add(o); } return false; } } 

Другие варианты:

  • Используйте массив, который ограничен.
  • Измените код, который использует список, чтобы обеспечить ограничение (например, ограничение ArrayList для хранения 10 значений )
  • Найдите реализацию списка с ограничением (некоторые примеры перечислены здесь): Любой способ установить максимальный размер коллекции?

Вы модифицируете свой метод настройки таким образом.

 private static ArrayList<String> playerList = new ArrayList<String>(); public boolean addToPlayerList(String input) { if (playerList.size() < 10) { playerList.add(input); return true; } else { return false; } } 

Или

Вы можете расширить ArrayList и создать свой собственный настраиваемый класс.

 public class MyArrayList extends ArrayList { @Override public boolean add(String input) { if (this.size() < 10) { return super.add(input); } else { return false; } } }