Как мне изменить, какой String Array использует мой Spinner? - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь изменить содержимое моих двух спиннеров.Итак, я создал свои Spinners:

       Spinner spinner01 = (Spinner) findViewById(R.id.Spinner01);
    Spinner spinner02 = (Spinner) findViewById(R.id.Spinner02);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.MetricUnitsArray, android.R.layout.simple_spinner_item);
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
            this, R.array.MetricUnitsArray, android.R.layout.simple_spinner_item);


    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner01.setAdapter(adapter1);
    spinner02.setAdapter(adapter2);

    spinner01.setOnItemSelectedListener(new MyOnItemSelectedListener1());
    spinner02.setOnItemSelectedListener(new MyOnItemSelectedListener2());

Теперь другим способом я хочу сделать что-то вроде этого:

    adapter1 = ArrayAdapter.createFromResource(
            this, R.array.ImperialUnitsArray, android.R.layout.simple_spinner_item);
    adapter2 = ArrayAdapter.createFromResource(
            this, R.array.ImperialUnitsArray, android.R.layout.simple_spinner_item);

Есть ли способ получитьадаптеры для чтения из другого String Array?Или я должен заменить значения в String Array новыми?

Ответы [ 3 ]

1 голос
/ 21 июля 2012

Создайте отдельные адаптеры для каждого массива, который вы хотите назначить spinner2. Объявите их как окончательные. Поместите объявления адаптера, прежде чем устанавливать spinner1 ItemSelected Listener. В слушателе spinner1 ItemSelected установите соответствующий адаптер при необходимости.

В приведенном ниже коде у меня есть два счетчика. В spinner1 есть 4 записи, содержащие типы датчиков, при выборе одного из типов датчиков spinner2 заполняется различными моделями для этого типа датчика.

public class MainActivity extends Activity {

void showToast(CharSequence msg) {
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

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

   final Spinner s1 = (Spinner) findViewById(R.id.spinner_sensor_type);
   final Spinner s2 = (Spinner) findViewById(R.id.spinner_sensor_model);
   final ArrayAdapter<CharSequence> sensor_adapter = ArrayAdapter.createFromResource(
            this, R.array.sensors,android.R.layout.simple_spinner_item);
    sensor_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    final ArrayAdapter<CharSequence> pa_adapter = ArrayAdapter.createFromResource(
            this, R.array.pa_models,android.R.layout.simple_spinner_item);
    final ArrayAdapter<CharSequence> ca_adapter = ArrayAdapter.createFromResource(
            this, R.array.ca_models,android.R.layout.simple_spinner_item);
    final ArrayAdapter<CharSequence> ni_adapter = ArrayAdapter.createFromResource(
            this, R.array.ni_models,android.R.layout.simple_spinner_item);
    final ArrayAdapter<CharSequence> ni_fe_adapter = ArrayAdapter.createFromResource(
            this, R.array.ni_fe_models,android.R.layout.simple_spinner_item);
    pa_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ca_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ni_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ni_fe_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(sensor_adapter); 
    s2.setAdapter(pa_adapter); // set default array values in spinner 2 
    s1.setOnItemSelectedListener(
            new OnItemSelectedListener() {
                public void onItemSelected(
                        AdapterView<?> parent, View view, int position, long id) {
                    showToast("Sensor Type: position=" + position + " id=" + id);
                    switch (position) {
                    case 0: 
                        s2.setAdapter(pa_adapter);                          
                            break;
                    case 1: 
                        s2.setAdapter(ca_adapter);
                            break;
                    case 2:
                        s2.setAdapter(ni_adapter);
                            break;
                    case 3:
                        s2.setAdapter(ni_fe_adapter);
                    default: // Do this...
                            break;
               }  

                }

                public void onNothingSelected(AdapterView<?> parent) {
                    showToast("Sensor Type: unselected");
                }
            });



    s2.setOnItemSelectedListener(
            new OnItemSelectedListener() {
                public void onItemSelected(
                        AdapterView<?> parent, View view, int position, long id) {
                    showToast("Sensor Model: position=" + position + " id=" + id);
                }

                public void onNothingSelected(AdapterView<?> parent) {
                    showToast("Sensor Model: unselected");
                }
            });
}

}

0 голосов
/ 10 июня 2011

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

0 голосов
/ 10 июня 2011

Вы можете использовать геттеры / сеттеры ArrayAdapter:

например:

adapter1.clear();
adapter1.addAll(theNewListOfValues);
adapter1.notifyDatasetChanged();
...