尝试从 DatePicker DialogFragment 设置 EditText 的文本
Trying to set text of EditText from DatePicker DialogFragment
我只是想从我在网上找到的众多 android 日期选择器教程之一创建的日期选择器对话框中获取日期。一旦选择了文本日期,我似乎在实际检索文本日期的某个地方出错了。我有一个 DatePickerFragment class,它是从嵌套在我的 MainActivity activity class 中的 CreateEvent 片段调用的。这是日期选择器:
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
,我理解这意味着它实际上无法在我的创建事件片段 xml 文件中找到 edittext 元素。
我应该如何设置来自 onDateSet
的这个 edittext 元素的文本,或者我是否必须改变我的方法?
我试过了this way但是没用。
我已通过以下代码行完成此操作:
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;
}
}
第二个Class:
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");
您需要使用 接口 将数据从 datepicker
获取到调用方 fragment
:
public interface DateListener {
void passDate(String date);
}
创建一个名为mListener
:
的成员变量
private DateListener mListener;
覆盖 onAttach
& onDetach
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
}
你应该可以开始了。
我只是想从我在网上找到的众多 android 日期选择器教程之一创建的日期选择器对话框中获取日期。一旦选择了文本日期,我似乎在实际检索文本日期的某个地方出错了。我有一个 DatePickerFragment class,它是从嵌套在我的 MainActivity activity class 中的 CreateEvent 片段调用的。这是日期选择器:
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
,我理解这意味着它实际上无法在我的创建事件片段 xml 文件中找到 edittext 元素。
我应该如何设置来自 onDateSet
的这个 edittext 元素的文本,或者我是否必须改变我的方法?
我试过了this way但是没用。
我已通过以下代码行完成此操作:
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;
}
}
第二个Class:
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");
您需要使用 接口 将数据从 datepicker
获取到调用方 fragment
:
public interface DateListener {
void passDate(String date);
}
创建一个名为mListener
:
private DateListener mListener;
覆盖 onAttach
& onDetach
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
}
你应该可以开始了。