如何在 Android 中为 Spinner 设置选定项目

How to set selected item for Spinner in Android

在 Android 应用程序中,我有一个 SpinnerAdapter 用于显示信用卡的到期年限。我的变量 expirationYears 包含一个字符串数组,年份从 "2020""2029"。它被声明为 String[] expirationYears = new String[10]; 然后我用一个函数将十年设置为字符串,从当年开始,然后是之后的九年,数组中总共有十个元素。当我 运行 它时,这是我看到的:

到目前为止一切都很完美。唯一的问题是,如上图所示,2020 是默认选择的年份。那是 expirationYears 数组中的第一个元素。但我想将 2021 设置为默认值(数组的第二个元素)。这是我的代码:

Spinner spinnerYearCreditCardPayment;
SpinnerAdapter creditCardYearAdapter = new SpinnerAdapter(Payment.this, expirationYears);
creditCardYearAdapter
    .setDropDownViewResource(android.R.layout.spinner_dropdown_item);
spinnerYearCreditCardPayment.setAdapter(creditCardYearAdapter);
spinnerYearCreditCardPayment
    .setOnItemSelectedListener(new OnItemSelectedListener() {
        ..........
    });

我期待有一些 属性 可用于定义我想默认显示的元素。类似于 creditCardYearAdapter.setSelectedItem(INDEX_NUMBER)。但是那个 属性 不存在。您知道我如何设置默认选定项,使其不是数组的第一个元素 (2020) 而是第二个元素 (2021) 吗?谢谢。

更新 1:

根据 The_Martian 的回答,这就是我所做的:

spinnerYearCreditCardPayment
    .setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
           arg0.setSelection(1);
           cardYear = (String) spinnerYearCreditCardPayment
               .getSelectedItem();
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

现在我正确地将数组的第二个元素(“2021”)视为默认选择。

问题是当我使用arg0.setSelection(1);时,我选择了另一年,它没有反应。所选年份仍然是“2021”,即使我正在尝试更改年份。

试试这个片段

  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    {
       public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
         {

               int seleccion=parent.getSelectedItemPosition();
                spinner.setSelection(position)
        });
    }

您可以执行类似以下操作。我只是在这里给你一个想法。

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                 parent.setSelection(position + 1);  
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

您可以 select 基于值而非位置的微调项。可以参考下面的例子-

String value = "to be selected value";
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.select_state, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
if (value != null) {
    int spinnerPosition = adapter.getPosition(value);
    mSpinner.setSelection(spinnerPosition);
}