如何使用DialogFragment在EditText中显示选定日期

Ore*_*reo 6 android datepicker android-edittext android-dialogfragment

DialogFragment用来显示DatePicker用户点击的时间EditText

如何在相同的日期显示所选日期EditText.

我用作为参考.

DatePickerFragment.java:

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        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);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(year, monthOfYear, dayOfMonth);

        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
        String formattedDate = sdf.format(c.getTime());
        Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show();
    }

}
Run Code Online (Sandbox Code Playgroud)

分段:

editDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                android.support.v4.app.DialogFragment dialogFragment = new DatePickerFragment();
                dialogFragment.show(getFragmentManager(), "datePicker");
            }
        });
Run Code Online (Sandbox Code Playgroud)

当我点击EditText时,它会显示DatePicker并选择日期Toast.但我无法弄清楚如何显示该日期EditText

Chr*_*lla 4

根据您的类结构,最好的方法是创建一个以 EditText 作为参数的构造函数。

private EditText mEditText;
...
public DatePickerFragment(EditText editText)
{
  mEditText = editText;
}

 @Override
 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
{
  Calendar c = Calendar.getInstance();
  c.set(year, monthOfYear, dayOfMonth);

  SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
  String formattedDate = sdf.format(c.getTime());
  Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show();

  mEditText.setText( formattedDate );
}
Run Code Online (Sandbox Code Playgroud)

然后在创建对话框选择器类的实例时传递 editDate。

public void onClick(View v) 
{
  android.support.v4.app.DialogFragment dialogFragment = new DatePickerFragment(editDate);
dialogFragment.show(getFragmentManager(), "datePicker");
}
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是删除DatePickerDialog.OnDateSetListenerfrom DatePickerFragment并在片段中实现侦听器。

public class OtherFragment extends Fragment
        implements DatePickerDialog.OnDateSetListener 
{
   @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(year, monthOfYear, dayOfMonth);

        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
        String formattedDate = sdf.format(c.getTime());
        Toast.makeText(getActivity(), formattedDate, Toast.LENGTH_LONG).show();
        editDate.setText( formattedDate );
    }
}
Run Code Online (Sandbox Code Playgroud)