2012-05-02 3 views
0

Я работаю над приложением и нуждаюсь в некоторой помощи с помощью виджета spinner. Массив не имеет записей по его созданию и будет заполнен другой функцией. Поэтому я должен использовать adapter.add(item); и spinner.setAdapter(adapter);, чтобы обновить счетчик в этой функции, я думаю.Android Spinner добавить товар

// global variables 
    String[] test = new String[100]; 
    int x = 0; 
    Spinner s; 
    ArrayAdapter adapter; 
    Button btn1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 
     s = (Spinner) findViewById(R.id.spinner1); 
     adapter = new ArrayAdapter(this, 
     android.R.layout.simple_spinner_item, test); 
    } 

    public void onClick(View arg0) { 
     test[x] = String.valueOf(x);; 
     x++; 
     adapter.add(test[x]); 
     s.setAdapter(adapter); 
    } 

только для образования цели я попытался это, но есть еще ошибка в функции OnClick(). Что-то должно быть сделано с ArrayAdapter, я думаю. Но я не знаком с этим и не нашел примера для добавления itmes, нажав кнопку. Возможно, в другом месте есть простой провал, но в настоящее время я его просто не вижу.

здесь полный код:

ArrayList<Integer> test; 
    int x = 0; 
    Spinner s; 
    ArrayAdapter adapter; 
    Button btn1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 
     s = (Spinner) findViewById(R.id.spinner1); 
     test = new ArrayList<Integer>(); 
     adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, test); 
    } 

    public void onClick(View arg0) { 
     test.add(x); 
     x++; 
     s.setAdapter(adapter); 
    } 

ответ

0

Вы добавляете x к элементу массива, а затем передаете этот элемент методу adapter.add. Это фактически то же самое, что и использование: adapter.add (x) ;.

Почему бы не использовать ArrayList вместо массива. ArrayLists являются динамическими и не требуют указания начального размера. Очень быстрая проверка показала мне, что есть конструктор для Array Adapter, совместимый с ArrayLists, и я ожидаю любого потомка класса List. См. Пример кода ниже.

ArrayList<Integer> test = new ArrayList<Integer>(); 

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, test); 

Я знаю, что это не полное решение вашей проблемы, но только указатель на возможно лучший способ сделать это.

Проведите поиск по веб-сайту с помощью «android update arrayAdapter во время выполнения», и я уверен, что вы наткнетесь на более конкретный пример.

+0

Большое спасибо, проблема решена. никогда раньше не использовал ArrayList, на самом деле это кажется мне очень удобной заменой обычного массива. – Silu

0

Проблема заключается вы настраиваете данные в ArrayAdapter»стать Участком 100 нулевых строк, а затем добавить к концу, что при нажатии кнопки кнопка. Попытайтесь изменить свою переменную test на new String[0].

Затем в вашем методе onClick просто позвоните adapter.add(String). Он добавит его в конец ваших текущих данных, поэтому вам не нужно будет сначала выделять достаточно большой массив.

+0

ОК, это имеет смысл. Но это не сработает (я попробовал), просто изменив массив на 'new String [0]' и адаптирую функцию 'onClick'. По-прежнему существует исключение UnsupportetOperationException. в любом случае не имеет значения. Andrew S нашел лучшее решение (спасибо за это). Благодарю вас за помощь. – Silu

+0

Ahh, функция добавления должна поддерживаться только при использовании 'List' –

Смежные вопросы