2

我正在创建一个 android 应用程序,询问用户他们的出生日期和出生月份。我正在使用两个微调器(一个用于一个月,一个用于该月的几天)。我希望天数的微调器根据月份而变化,例如二月有 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

        }
    });

}
4

1 回答 1

1

确实,DatePicker 是最简单的方法,否则您将如何考虑闰年以显示 2 月的额外一天?但如果你坚持使用 Spinners,我会这样做:

  1. 当视图首次显示时,禁用 daySpinner,并填充 monthSpinner 并将选择设置为空。
  2. 在 monthSpinner 的 OnItemSelected 侦听器中,一旦更改为月份,启用 daySpinner 并根据所选月份,使用正确的天数 ArrayAdapter 填充 daySpinner(例如,您将有 4 个第 1 天到第 28 天、第 1 天到第 29 天的数组, 1 到 30、1 到 31)并将适配器设置为 daySpinner。
  3. 当用户更改monthSpinner 选择时,您必须再次重建daySpinner。

最后,当单击确定按钮时,只需从微调器中选择月份和日期。

于 2012-07-16T01:32:36.853 回答