简体   繁体   English

如何更改我的 Spinner 使用的字符串数组?

[英]How do I change which String Array my Spinner is using?

I'm trying to change the contents of my two Spinners.我正在尝试更改我的两个 Spinners 的内容。 So I've got my Spinners created:所以我已经创建了我的 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());

Now from a different method, I want to be able to do something like this:现在从不同的方法,我希望能够做这样的事情:

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

Is there anyway to get the adapters to read from a different String Array?无论如何让适配器从不同的字符串数组中读取? Or should I be replacing the values in the String Array with new ones?或者我应该用新的值替换字符串数组中的值吗?

Create separate adapters for each array you wish to assign to spinner2.为您希望分配给 spinner2 的每个数组创建单独的适配器。 Declare them as final.将它们声明为最终的。 Place the adapter declarations before you set spinner1 ItemSelected Listener.在设置 spinner1 ItemSelected Listener 之前放置适配器声明。 In spinner1 ItemSelected listener, set the appropriate adapter as needed.在 spinner1 ItemSelected 监听器中,根据需要设置适当的适配器。

In the code below I have two spinners.在下面的代码中,我有两个微调器。 spinner1 has 4 entries containing sensor types, when one of the sensor types is selected spinner2 is then populated with the various models for that sensor type. 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");
                }
            });
}

} }

You can use the ArrayAdapter 's getters/setters:您可以使用ArrayAdapter的 getter/setter:

Eg:例如:

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

You should be able to just call setAdapter on your spinners with the new adapters.您应该能够使用新适配器在您的微调器上调用 setAdapter。 I would suggest storing the adapters as fields in your activity after you create them so you can easily re-use them if you need to swap between the adapters again.我建议在创建适配器后将它们作为字段存储在活动中,以便在需要再次在适配器之间交换时轻松地重新使用它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM