我正在创建一个 Android 应用程序,询问用户他们的出生日期和出生月份。我正在使用两个微调器(一个用于月份,一个用于一个月中的几天)。 我希望日期的微调器根据月份进行更改, 例如,2 月有 29 天,所以我希望日期微调器停在数字 29。但如果选择了 31 天的月份,我希望日期微调器上升到 31。
最好的方法是什么?我知道我可以使用 DatePicker,但我以前从未使用过它,我只需要一个月和一天(而不是年)。
debugText 只是我创建的一个 textView,用于测试我的微调器并确保我的编码到目前为止是正确的。
//代码
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.form);
// Month
monthSpinner = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> monthAdapter = ArrayAdapter
.createFromResource(this, R.array.month,
android.R.layout.simple_spinner_item);
monthAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_item);
monthSpinner.setAdapter(monthAdapter);
monthName = "January";
// Day
daySpinner = (Spinner) findViewById(R.id.spinner2);
final ArrayAdapter<CharSequence> dayAdapter = ArrayAdapter
.createFromResource(this, R.array.day,
android.R.layout.simple_spinner_item);
dayAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_item);
daySpinner.setAdapter(dayAdapter);
debugText = (TextView) findViewById(R.id.debugText);
debugText.setText("Jaunary");
daySpinner = (Spinner) findViewById(R.id.spinner2);
monthSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
int monthPos = monthSpinner.getSelectedItemPosition();
switch (monthPos) {
case 0:
debugText.setText("January");
break;
case 1:
debugText.setText("February");
break;
case 2:
debugText.setText("March");
break;
case 3:
debugText.setText("April");
break;
case 4:
debugText.setText("May");
break;
case 5:
debugText.setText("June");
break;
case 6:
debugText.setText("July");
break;
case 7:
debugText.setText("August");
break;
case 8:
debugText.setText("September");
break;
case 9:
debugText.setText("October");
break;
case 10:
debugText.setText("November");
break;
case 11:
debugText.setText("December");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
最佳答案
确实,DatePicker 是执行此操作的最简单方法,否则您将如何解释闰年以显示 2 月的额外日期?但如果您坚持使用 Spinners,我会这样做:
- 首次显示 View 时,禁用 daySpinner,填充 monthSpinner 并将选择设置为空。
- 在 monthSpinner 的 OnItemSelected 监听器中,一旦它更改为一个月,启用 daySpinner 并根据所选月份,使用正确的天数 ArrayAdapter 填充 daySpinner(例如,您将有 4 个数组,第 1 天到第 28 天,1到 29、1 到 30、1 到 31)并将适配器设置为 daySpinner。
- 当用户更改 monthSpinner 选择时,您必须再次重建 daySpinner。
最后,单击“确定”按钮后,只需从微调器中选择月份和日期即可。
关于Android Spinner 添加/删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496445/