【问题标题】:DatePickerDialog in api level less than 11api级别小于11的DatePickerDialog
【发布时间】:2015-01-21 06:54:50
【问题描述】:

我正在尝试在我的应用程序中使用 DatePickerDialog。它在 API 级别大于 11 的每台设备上都能完美运行。但它在 API 级别低于 11 时无法正常工作。

这是我的 DatePickerDialog

package com.rh.bookmany.fragments;

import java.util.Calendar;

import com.rh.bookmany.interfaces.OnShowDateSelectedListener;


import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.DatePicker;

//DatePicker
    public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {


        int max;        
        OnShowDateSelectedListener onShowDateSelected;

        public DatePickerFragment(,int max) {
            this.max = max;
        }

        public Dialog onCreateDialog(Bundle savedInstanceState) {

            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            final Calendar c2 = Calendar.getInstance();
            c2.add(Calendar.DATE, max);
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);


            // new instance of DatePickerDialog
            DatePickerDialog dd = new DatePickerDialog(getActivity(),this,year, month, day);
            dd.getDatePicker().setMinDate(c.getTimeInMillis()); //ERROR HERE
            dd.getDatePicker().setMaxDate(c2.getTimeInMillis()); //ERROR HERE

            /*
                Lint says: 

                Call requires API level 11 (current min is 8): android.app.DatePickerDialog#getDatePicker
                Call requires API level 11 (current min is 8): android.widget.DatePicker#setMinDate
                Call requires API level 11 (current min is 8): android.widget.DatePicker#setMaxDate 
            */


            return dd;
        }

        @Override
        public void onDateSet(DatePicker view, int year, int month, int day) {

            Log.d("X","Date Picked:"+year+"-"+month+"-"+day);


        }

    }

我这样称呼它

// Showing Date Picker with 4 days after today
DialogFragment datePickerFragment = new DatePickerFragment(4);
datePickerFragment.show(getActivity().getSupportFragmentManager(),"datepicker");

lint 是这样说的

Call requires API level 11 (current min is 8): android.app.DatePickerDialog#getDatePicker
Call requires API level 11 (current min is 8): android.widget.DatePicker#setMinDate
Call requires API level 11 (current min is 8): android.widget.DatePicker#setMaxDate

我的问题是:

这三种方法是否可以在低于 11 的 api 级别下工作(getDatePicker()、setMinDate()、setMaxDate())。

如果是怎么办? else - 有没有其他选择??

【问题讨论】:

标签: android datepicker


【解决方案1】:

如果日期超出范围,您可以启动日期时间选择器(我的意思是 nt 在最小值和最大值内)

Calendar cal = Calendar.getInstance(Locale.getDefault());
        DatePickerDialog dd = new DatePickerDialog(getActivity(),this,year, month, day);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    dd.getDatePicker().setMinDate(c.getTimeInMillis()); 
                    dd.getDatePicker().setMaxDate(c2.getTimeInMillis());

        } else {
            final int minYear = c.getTimeInMillis().get(Calendar.YEAR);
            final int minMonth = c.getTimeInMillis().get(Calendar.MONTH);
            final int minDay = c.getTimeInMillis().get(Calendar.DAY_OF_MONTH);

          final int maxYear = c2.getTimeInMillis().get(Calendar.YEAR);
            final int maxMonth = c2.getTimeInMillis().get(Calendar.MONTH);
            final int maxDay = c2.getTimeInMillis().get(Calendar.DAY_OF_MONTH);

            this.datePicker.init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
                                cal.get(Calendar.DAY_OF_MONTH),
                    new OnDateChangedListener() {

                        public void onDateChanged(DatePicker view, int year,
                                int month, int day) {
                            Calendar newDate = Calendar.getInstance();
                            newDate.set(year, month, day);

                            if (c.after(newDate)) {
                                view.init(minYear, minMonth, minDay, this);
                            }else if(c2.before(newDate){
                    view.init(maxYear, maxMonth, maxDay, this);
                     }
                        }
                    });

        }

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 2012-07-22
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多