我有从 DialogFragment 扩展的 DatepickerFragment。在我的主要 fragment 中有两个编辑文本。第一个用于开始日期,第二个用于完成日期。这些用于一些用户操作。用户首先点击 edittext 选择日期,另一个是相同的方式但是我对如何处理 DatepickerFragment 上的 edittexts 感到困惑。最好的方法是什么?
etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getActivity().getFragmentManager();
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.show(fragmentManager, "datepicker");
}
});
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) {
populateSetDate(year, monthOfYear+1, dayOfMonth);
}
private void populateSetDate(int year, int month, int dayOfMonth) {
String datetime = dayOfMonth + "/" + month + "/" + year ;
//EditText edtext = (EditText)getView().findViewById(R.id.overflow_starting_date);
// The edittext is changable it is not a good way to define in here
}
}
最佳答案
我通常在单独的类中创建自定义 DatePickerFragment
,然后使用 Listener 模型来实现您想要实现的目标。本质上:
在你的 DatePickerFragment 中,定义一个接口(interface) -
public interface OnDateChosenListener {
void onDateChosen(int year, int month, int day);
}
然后,在 DatePickerFragment 类中为该接口(interface)定义一个私有(private)变量 -
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private OnDateChosenListener mOnDateChosenListener = null;
...
添加一个函数来设置一个 OnDateChosenListener -
public void setOnDateChosenListener(OnDateChosenListener listener) {
mOnDateChosenListener = listener;
}
DatePickerFragment 类的最后一件事,将事件和值传递给监听器(如果存在)-
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (mOnDateChosenListener != null) {
mOnDateChosenListener.onDateChosen(year, monthOfYear, dayOfMonth);
}
}
最后,最重要的。请记住在您使用新的 DatePickerFragment 的任何地方添加一个监听器,在您的情况下,一个 Activity -
FragmentManager fragmentManager = getActivity().getFragmentManager();
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.addOnDateChosenListener(new OnDateChosenListener() {
public void onDateChosen(int year, int month, int day) {
// use values to change EditText value
}
}
datePickerFragment.show(fragmentManager, "datepicker");
Listener 模型是一个很好的实践,在 Android 框架中被广泛使用。
关于java - 如何使用 datepicker dialogdragment 不同的 edittext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125397/