【问题标题】:how to set date in Datepicker dialog from edittext android?如何从edittext android在Datepicker对话框中设置日期?
【发布时间】:2016-12-04 11:19:12
【问题描述】:

我有一个datepicker 对话框,其中放入了一个edittext 来设置生日.. 设置日期后的对话框返回当前日期.. 我需要在datepicker 对话框中显示我选择的日期选择之后呢?

Datepicker 对话框类:

    public class DatePickerDialog2 extends DialogFragment{

public static final String ARG_DEFAULT = "default";

private DatePicker datePicker;
private String defaultDate;

    private DatePickerDialog.OnDateSetListener onDateListener;
public DatePickerDialog2() {
    try {
        OnDatePickerDoneButtonClickedListener act = (OnDatePickerDoneButtonClickedListener) getActivity();

    } catch (ClassCastException e) {
        throw new ClassCastException("Must implement OnDatePickerDoneButtonClickedListener");
    }
}


    public interface OnDatePickerDoneButtonClickedListener {
    void OnDatePickerDoneButtonClicked(String date);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    defaultDate = getArguments().getString(ARG_DEFAULT);

}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     Calendar calendar = Calendar.getInstance();
    if (TextUtils.isEmpty(defaultDate)) {
        DateFormat df = new SimpleDateFormat("dd/MMM/yyyy");;
        try {
            calendar.setTime(df.parse(new Date().toString()));
            Log.d("first", defaultDate + " -");
        } catch (ParseException e) {
            e.printStackTrace();
        }

    } else {
        try {
            DateFormat df =  new SimpleDateFormat("dd/MMM/yyyy");
            calendar.setTime(df.parse(defaultDate));
            Log.d("second", defaultDate + " -");
        } catch (ParseException e1) {
            Log.d("third",defaultDate+" -");
        }
    }
    datePicker = new DatePicker(getActivity());

    datePicker.setCalendarViewShown(false);
    datePicker.setMaxDate(new Date().getTime()-1 * 24 * 3600 * 1000);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {

//            String date =datePicker.getYear()+ "-"+ datePicker.getDayOfMonth() + "-" + (datePicker.getMonth() + 1)   ;
            int day = datePicker.getDayOfMonth();
            int month = datePicker.getMonth();
            int year =  datePicker.getYear();

         final Calendar calendar = Calendar.getInstance();
            calendar.set(year, month, day);
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy");
            String date = sdf.format(calendar.getTime());
            OnDatePickerDoneButtonClickedListener act = (OnDatePickerDoneButtonClickedListener) getActivity();
            act.OnDatePickerDoneButtonClicked(date);
            dismiss();
        }
    })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dismiss();
                }
            })
                    //.setTitle("Select date")
            .setView(datePicker);
    // Create the AlertDialog object and return it
    return builder.create();

}
}

edittext 我称之为对话框以打开日期选择器:

  birthday.setOnClickListener(new View.OnClickListener() {
                               @Override
                               public void onClick(View v) {
                                   DatePickerDialog2 dialog = new DatePickerDialog2();
                                   Bundle bundle = new Bundle();
                                   bundle.putString("dateAsText", birthday.getText().toString());
                                   dialog.setArguments(bundle);
                                   dialog.show(getSupportFragmentManager(), "date_picker_frag");
                               }
                           });

【问题讨论】:

    标签: android datepicker dialog android-edittext fragment


    【解决方案1】:

    首先在你的 DatePickerDialog2 类中实现 DatePickerDialog.OnDateSetListener 然后在你的 DatePickerDialog2 类中覆盖 onDateSet 方法

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        String selDate = year + "-" + String.format("%02d", (monthOfYear+1)) + "-" + String.format("%02d", dayOfMonth);
        Intent i = new Intent();
        i.putExtra("selectedDate",selDate);
        getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
    }
    

    然后在你的活动课上

    mEtDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment picker = new DatePickerFragment();
                picker.setTargetFragment(OverviewFragment.this, ID_DATEPICKER_FRAGMENT);
                picker.show(getFragmentManager().beginTransaction(), "datePicker");
            }
        });
    

    然后覆盖方法onActivityResult

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if((resultCode == Activity.RESULT_OK)){
            Bundle bundle=data.getExtras();
            String resultDate = bundle.getString("selectedDate","");
            mEtDate.setText(resultDate);
        }
    }
    

    【讨论】:

    • 它告诉我无法解析您在edittext中编写的代码?
    • 没有活动课吗?
    【解决方案2】:

    试试这个

    private Calendar cal;
    private int day;
    private int month;
    private int year;
    EditText et;
    
    cal = Calendar.getInstance();
    day = cal.get(Calendar.DAY_OF_MONTH);
    month = cal.get(Calendar.MONTH);
    year = cal.get(Calendar.YEAR);
    et = (EditText) findViewById(R.id.editText);
    et.setInputType(0);
    et.setOnClickListener(new View.OnClickListener() {
    
     @Override
     public void onClick(View arg0) {
      hideSoftKeyboard(RegisterActivity.this);
      android.support.v4.app.DialogFragment newFragment = new SelectDateFragment();
      newFragment.show(getSupportFragmentManager(), "DatePicker");
    
     }
    });
    
    public static class SelectDateFragment extends android.support.v4.app.DialogFragment implements DatePickerDialog.OnDateSetListener {
    
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
      final Calendar calendar = Calendar.getInstance();
      int yy = calendar.get(Calendar.YEAR);
      int mm = calendar.get(Calendar.MONTH);
      int dd = calendar.get(Calendar.DAY_OF_MONTH);
      return new DatePickerDialog(getActivity(), this, yy, mm, dd);
     }
    
     public void onDateSet(DatePicker view, int yy, int mm, int dd) {
      populateSetDate(yy, mm + 1, dd);
     }
    
     public String populateSetDate(int year, int month, int day) {
      et.setText(month + "/" + day + "/" + year);
      return (month + "/" + day + "/" + year);
     }
    
    }
    

    【讨论】:

    • clicklistener 和 datepicker 不在同一个类中
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多