Nano Hash - криптовалюты, майнинг, программирование

как добавить элемент в ArrayAdapter Spinner?

у меня был EditText, кнопка и счетчик. При нажатии кнопки счетчик добавит новый элемент с именем, которое вы ввели в EditText. Но вот вопрос, мой метод adapter.add() кажется не работает... вот мой код:

public class Spr extends Activity {
Button bt1;
EditText et;
ArrayAdapter<CharSequence> adapter;
Spinner spinner;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    bt1 = (Button)this.findViewById(R.id.bt1);
    et = (EditText)this.findViewById(R.id.et);  
    spinner = (Spinner)this.findViewById(R.id.spr);

    adapter = ArrayAdapter.createFromResource(
            this, R.array.planets_array, android.R.layout.simple_spinner_item);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(adapter);

    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String temp = et.getText().toString();

            adapter.add(temp);
            adapter.notifyDataSetChanged();
            spinner.setAdapter(adapter);

        }
    });


    spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {

            Toast.makeText(parent.getContext(), "The planet is " +
                      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }});
}

}

Благодарность! ... все еще жду


  • Вам определенно не нужно снова вызывать spinner.setAdapter() в вашем View.OnClickListener. Ваш код выглядит так, как будто он должен работать. 24.03.2010
  • Вам также не нужно звонить notifyDataSetChanged(). Просто adapter.add() должно хватить. Когда вы говорите, что не работает, что вы имеете в виду? 24.03.2010
  • я искал ответ, и кто-то сказал мне, что вызовите notifyDataSetChanged() и setAdapter() снова может помочь. поэтому я добавляю его, но он все еще не работает... когда я запускаю его и нажимаю кнопку. он будет выскочила ошибка: приложение неожиданно остановилось. попробуйте еще раз... (я думаю, проблема в методе spinner.add(). ) спасибо за вашу помощь! 25.03.2010
  • было бы полезно, если бы вы могли показать нам исключение, отображаемое logcat в момент сбоя вашего приложения. 25.03.2010
  • исключений не появляется. Я пробовал: поместите элементы в ArrayList al, а затем adapter = new ArrayAdapter‹String›(..., ..., al) ... затем это работает... мой вопрос: в чем разница между ними (я имею в виду метод ArrayAdapter.createFromResource() и новый ArrayAdapter‹String›())?? и мне жаль, что мой английский такой плохой, я хочу, чтобы вы могли понять, что я говорю... большое спасибо 26.03.2010
  • Если ваше приложение сообщает, что приложение неожиданно остановилось, у вас есть исключение. Это в журнале... введите adb logcat, а затем запустите свой код. Вставьте исключение сюда. 01.04.2010

Ответы:


1

Когда вы создали свой ArrayAdapter, вы не назначили ему список с изменяемым размером, поэтому, когда вы делаете add(), он не может увеличивать его размер и выдает исключение UnsupportedOperationException.

Попробуйте что-то вроде этого:

List<CharSequence> planets = new ArrayList<CharSequence>();
adapter = new ArrayAdapter<CharSequence>(context,
                       R.array.planets_array, planets);
//now you can call adapter.add()

Вы должны использовать список. С массивом, таким как CharSequence[], вы получите такое же исключение UnsupportedOperationException.

26.10.2010

2

Хави прав, за исключением того, что не ссылайтесь на массив для второго параметра.

adapter = new ArrayAdapter<CharSequence>(this,
  android.R.layout.simple_spinner_item,
  someList);
04.11.2010

3

Я считаю, что это работает так, как задумано, но не так, как ожидалось. Раньше ArrayAdapter принимал только массив, но позже был добавлен конструктор списка. Я предполагаю, что это просто toArray() в вашем списке. Вот почему вам нужно либо вызвать add для адаптера, либо создать новый адаптер при изменении вашего списка.

20.07.2010

4

вы можете создать arraylist и скопировать все обращения к этому объекту, затем создать arrayadaptor и отправить этот arraylist, а в onclicklistener кнопки добавить содержимое edittext в объект arraylist, а затем вызвать notifydatasetchanged из adator

14.04.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..