我正在创建一个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是执行此操作的最简单方法,否则您将如何计算leap年以显示2月的额外日期?但是,如果您坚持使用Spinners,则可以按照以下方式操作:


首次显示视图时,请禁用daySpinner,然后填充monthSpinner并将选择内容设置为空。
在monthSpinner的OnItemSelected侦听器中,将其更改为一个月后,启用daySpinner并根据所选的月份,用正确的days ArrayAdapter填充daySpinner(例如,您将有4个数组,分别是1至28、1至29, 1到30、1到31)并将适配器设置为daySpinner。
当用户更改monthSpinner选择时,您必须再次重建daySpinner。


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

关于android - Android Spinner添加/删除条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11496445/

10-09 15:26