尝试从DatePicker DialogFragment设置EditText的文本

我只是试图从我在网上找到的许多android datepicker教程中创建的一个datepicker对话框中获取日期。 一旦选中,我在实际检索文本日期的某个地方似乎出错了。 我有一个DatePickerFragment类,它从一个嵌入我的MainActivity活动类中的CreateEvent片段调用。 这是DatePicker:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { private EditText txtDate; @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); } public void onDateSet(DatePicker view, int year, int month, int day) { txtDate = (EditText)view.findViewById(R.id.txtDate); txtDate.setText(day + " " + (month + 1) + " " + year); } } 

当我实际尝试设置日期时,我尝试Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence) on a null object reference ,我理解这意味着它无法实际找到edittext元素在我的create事件片段xml文件中。

我应该如何从onDateSet设置此edittext元素的文本,还是必须更改我的方法?

我试过这种方式,但无济于事。

您需要使用接口将数据从datepicker到调用者fragment

 public interface DateListener { void passDate(String date); } 

创建一个名为mListener成员变量

 private DateListener mListener; 

重写onAttachonDetach fragment方法:

 @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (DateListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement DateListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } 

接下来,在调用者fragment实现此interface并覆盖passDate方法:

 @Override public void passDate(String date) { // Do something with 'date', yourEditText.setText(date) for the example } 

你应该好好去。

我通过下面的代码行完成了这个:

 public class DatePickerDialogMy extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { DateSetting dateSetting=new DateSetting(getActivity()); Calendar calendar= Calendar.getInstance(); int year= calendar.get(calendar.YEAR); int month=calendar.get(calendar.MONTH); int day=calendar.get(calendar.DAY_OF_MONTH); DatePickerDialog dialog; dialog=new DatePickerDialog(getActivity(),dateSetting,year,month,day); return dialog; } } 

第二类:

  public class DateSetting implements android.app.DatePickerDialog.OnDateSetListener { Context context; public DateSetting(Context context){ this.context=context; } @Override public void onDateSet(DatePicker view, int year, int dateSetting, int dayOfMonth) { Toast.makeText(context, "selected date:" + dateSetting + "/" + dayOfMonth + "/" + year, Toast.LENGTH_LONG).show(); // MainActivity.test.setText(String.valueOf(dateSetting)); MyActivity.dobEditText.setText(dateSetting+"/"+dayOfMonth+ "/" + year); } } 

怎么称呼:

  DatePickerDialogMy datePickerDialog = new DatePickerDialogMy(); datePickerDialog.show(getSupportFragmentManager(), "date_picker");