【问题标题】:How to change the array source for a spinner? (Android Studio)如何更改微调器的数组源? (安卓工作室)
【发布时间】:2020-09-27 14:19:01
【问题描述】:

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

我有一个包含两个单选按钮和两个数组的活动:String[] tickets; 有 3 个项目,String[] subscriptions; 有 5 个项目。顺便说一句,单选按钮位于 radioGroup 内。

第一个radioButton 用于String[] tickets;,第二个radioButton 用于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);


【问题讨论】:

  • 到目前为止你已经尝试过什么,你能告诉我们你的代码吗?
  • @PraveenSP 当然!你好。我记得你帮了我:)))
  • @PraveenSP 我更新了帖子。这就是我到目前为止所尝试的全部。

标签: android arrays android-studio spinner


【解决方案1】:

您可以在您的 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;               
   }
 }
});

【讨论】:

  • 但是我应该把a1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(a1); spinner1.setOnItemSelectedListener(this);放在哪里?
  • 更新了 Java 中的答案。它将工作并涵盖您的所有代码。
  • 谢谢!但是这部分还是报错:(this, android.R.layout.simple_spinner_item,tickets)
  • 传递 MainActivity.this 而不是 this 作为第一个参数。
  • 非常感谢AlphaOne!它现在完美运行。你和普拉文帮了很多忙。谢谢你:))
【解决方案2】:

试试这个

        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;

【讨论】:

  • 一切看起来都不错,但 Android Studio 强调以下代码行的错误:(this, android.R.layout.simple_spinner_item,tickets) 它说:无法解析构造函数 'ArrayAdapter(anonymous android.widget.RadioGroup.OnCheckedChangeListener, int, java. lang.String[ ])'
  • 您需要传递 YourActivityName.this 作为第一个参数来解决歧义假设您的活动名称是 MyActivity 那么您需要传递 MyActivity.this
  • 非常感谢!!!它现在完美运行。非常感谢!
  • 没问题的人,不客气……感谢您记住这对我来说意义重大。对此,我真的非常感激。和快乐的编码:)
猜你喜欢
  • 2021-09-12
  • 2017-02-09
  • 2018-11-05
  • 2018-01-29
  • 1970-01-01
  • 2013-07-08
  • 2017-04-17
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多