2

編集テキストに次のコードを適用して日付を選択しています。

public class DatePickerFragment extends DialogFragment
{

    private OnDateSetListener listener;

    public DatePickerFragment(OnDateSetListener listener)
    {
        this.listener = listener;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        return new DatePickerDialog(getActivity(), listener, year, month, day);
    }
}

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
    //do some stuff
}

void showDateDialog()
{
    DatePickerFragment newFragment = new DatePickerFragment(this);
    newFragment.show(getFragmentManager(), "date_picker");
}

ただし、過去の日付をすべてグレー表示して、ユーザーが日付を選択できないようにしたいと考えています。これはコードを介して可能ですか? または、選択後に日付が過去の日付であるかどうかを手動で確認する必要がありますか?

4

4 に答える 4

1
date button on clcik method 

   dateButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);


            }
        });


for date piker create dialog method :

case DATE_DIALOG_ID:
            {

                Calendar calendar = Calendar.getInstance();
                final DatePickerDialog dojDPDilog = new DatePickerDialog(this,datePickerListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
                     dojDPDilog.setTitle("Select Date");
                try {
                    java.lang.reflect.Field mDatePickerField = dojDPDilog.getClass().getDeclaredField("mDatePicker");
                    mDatePickerField.setAccessible(true);
                    try {
                        dojDPicker = (DatePicker) mDatePickerField.get(dojDPDilog);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }

                dojDPicker.init(minYear, minMonth, minDay,new OnDateChangedListener() {
                            @Override
                            public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
                              disableDate(view, year, monthOfYear, dayOfMonth);
                              }


                        });
                return dojDPDilog;
            }  


for disable method:


      private void disableDate(DatePicker view, int year,int monthOfYear, int dayOfMonth) {

            if (year > maxYear)
            {
                view.updateDate(maxYear, maxMonth, maxDay);
            }
            else if (monthOfYear > maxMonth && year == maxYear)
            {
                view.updateDate(maxYear, maxMonth, maxDay);
            }
        else if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
            {
                view.updateDate(maxYear, maxMonth, maxDay);
            }
            else if (year < minYear)
            {
                view.updateDate(minYear, monthOfYear, dayOfMonth);
            }
            else if (monthOfYear < minMonth && year == minYear)
            {
                view.updateDate(minYear, minMonth, dayOfMonth);
            }
        else if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
            {
                view.updateDate(minYear, minMonth, minDay);
            }
        }



           and take local variables:

         int maxYear = c.get(Calendar.YEAR) + 100; 
    int maxMonth = c.get(Calendar.MONTH);
    int maxDay = c.get(Calendar.DAY_OF_MONTH);

    int minYear = c.get(Calendar.YEAR);
    int minMonth = c.get(Calendar.MONTH);
    int minDay = c.get(Calendar.DAY_OF_MONTH);
于 2013-12-20T11:31:37.350 に答える
0

onDateSet() メソッドでこれを試してみてください。これはフラグメントに対して機能しています。

Calendar calendar1 = Calendar.getInstance();
calendar1.set(2014,11-1,11);
view.setMinDate(calendar1.getTimeInMillis()-10000);
于 2014-11-11T01:57:55.213 に答える