如何在 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);
}
在 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);
}