Intereting Posts
Как использовать RippleDrawable программно в коде (а не xml) с Android 5.0 Lollipop? Устройства Android используют разное количество кучи и объема для одного и того же приложения Как нарисовать кольцо с использованием холста в android? Android-64-разрядная версия 64-битной версии: 32-разрядные бинарные файлы для эмуляторов Android от Linux деактивированы Безопасность потоков на Android LruCache (Android 3.1) Как импортировать только выбранные ABI из исходной библиотеки из AAR? Форматировать текст для пользовательских предложений поиска, предоставляемых в курсоре от поставщика контента Как просмотреть изображения R.drawable. * Android ScrollView не соответствует нижнему краю ребенка Как управлять экраном пустой загрузки Android Android? Как приостановить и возобновить DownloadManager Намерение не восстановлено правильно после того, как активность будет убита, если будут установлены четкие верхние и одиночные верхние флаги Как изменить цвет текста кнопки Android в глобальном масштабе в теме Как получить местоположение (на экране) строки в списке ViewPager с вложенными фрагментами?

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

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

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

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

 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; } } }