如何更改微调器的数组源? (Android 工作室)

How to change the array source for a spinner? (Android Studio)

这个我以前也问过,但是太笼统了。

我有一个带有两个单选按钮和两个数组的 activity:String[] tickets; 有 3 个项目,String[] subscriptions; 有 5 个项目。顺便说一下,单选按钮在 radioGroup 中。

第一个单选按钮用于 String[] tickets;,第二个单选按钮用于 String[] subscriptions;

当我检查第一个单选按钮时,我希望微调器由 String[] tickets 中的项目填充,而当我检查第二个单选按钮时,我希望微调器由 String[] subscriptions; 中的项目填充]

但是你是怎么做到的呢?我尝试使用一个空的临时数组并将其用作微调器的数组源。然后我会将这些数组之一放在空数组中。但是没有用。

编辑:

MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

   String[] tickets = {"Ticket #1", "Ticket #2", "Ticket #3"};
   String[] subscriptions = {"Sub #1", "Sub #2", "Sub #3", "Sub #4", "Sub #5"};
   String[] tempArray;
   Spinner spinner1;
   RadioGroup radioGroup;
   RadioButton radioButtonOption;

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);     
   setContentView(R.layout.activity_third);

   radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
   int selectedRadioButton = radioGroup.getCheckedRadioButtonId();
   radioButtonOption = (RadioButton)findViewById(selectedRadioButton);
   spinner1 = (Spinner)findViewById(R.id.spinner1);


   radioButtonOption.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
         if (radioButtonOption.getText().equals("Journeys/Tickets")) {
            tempArray = tickets;
         } else if (radioButtonOption.getText().equals("Subscription")) {
            tempArray = subscriptions;
         }
      }
   });

   spinner1.setOnItemSelectedListener(this);
   ArrayAdapter a1 = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, tempArray);
   a1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   spinner1.setAdapter(a1);
   spinner1.setOnItemSelectedListener(this);


您可以在 radioGroup 上调用 OnCheckChangeListener,然后相应地设置微调器适配器。看例子:

a1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);               
spinner1.setOnItemSelectedListener(this);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
    public void onCheckedChanged(RadioGroup group, int checkedId) {

  switch(checkedId){
       case R.id.radio_button1:
                      a1 = ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,tickets);
                      spinner1.setAdapter(a1);
                      break;
       case R.id.radio_button2:
                      a1 = ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,subscriptions);
                      spinner1.setAdapter(a1);
                      break;               
   }
 }
});

试试这个

        radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
        spinner1 = (Spinner)findViewById(R.id.spinner1);

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId)
                {
                    case  R.id.button_1:
                        a1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item ,tickets);
                        spinner1.setAdapter(a1);
                        break;

                    case R.id.button_2:
                        a1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,subscriptions);
                        spinner1.setAdapter(a1);
                        break;

                }

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

            }
        });

        spinner1.setOnItemSelectedListener(this);

注意你需要声明ArrayAdapter a1;