我有两个 DatePickerFragment
因为我需要获取开始时间和结束时间。
private void showDatePickerTimePeriodStart() {
final DatePickerFragment date = new DatePickerFragment();
// Sets up the current date in Dialog.
final Calendar calender = Calendar.getInstance();
final Bundle args = new Bundle();
args.putInt("year", calender.get(Calendar.YEAR));
args.putInt("month", calender.get(Calendar.MONTH));
args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
date.setArguments(args);
// Sets callback to the captured data.
date.setCallBack(ondate);
date.show(getFragmentManager(), "Date Picker");
}
OnDateSetListener ondate = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
final Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, monthOfYear, dayOfMonth);
millisSinceEpochStart = calendar.getTimeInMillis();
}
};
private void showDatePickerTimePeriodEnd() {
final DatePickerFragment date = new DatePickerFragment();
// Sets up the current date in Dialog.
final Calendar calender = Calendar.getInstance();
final Bundle args = new Bundle();
args.putInt("year", calender.get(Calendar.YEAR));
args.putInt("month", calender.get(Calendar.MONTH));
args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
date.setArguments(args);
/**
* Set Call back to capture selected date
*/
date.setCallBack(ondateSecond);
date.show(getFragmentManager(), "Date Picker");
}
OnDateSetListener ondateSecond = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
final Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, monthOfYear, dayOfMonth);
millisSinceEpochEnd = calendar.getTimeInMillis();
}
};
fragment :
public class DatePickerFragment extends DialogFragment {
OnDateSetListener ondateSet;
public DatePickerFragment() {}
public void setCallBack(OnDateSetListener ondate) {
ondateSet = ondate;
}
private int year;
private int month;
private int day;
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
year = args.getInt("year");
month = args.getInt("month");
day = args.getInt("day");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), ondateSet, year, month, day);
}
}
还有一个Fragment,也是一样的。
所以在我看来,如果我设置第一个日期,我需要执行setCallBack
,但是我有两个单独的按钮,所以根据我的理解,我需要另一个方法来设置另一个回调。我想避免这种重复,因为它不是很干燥。
如何解决这个问题?
最佳答案
从技术上讲,由于它设置了不同的变量,因此它具有不同的功能并且不会做太多重复。压缩复制代码的一种方法是将其移动到另一种方法。试试这个:
public long getMillis(int year, int monthOfYear, int dayOfMonth){
final Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, monthOfYear, dayOfMonth);
return calendar.getTimeInMillis();
}
然后您可以简单地让回调调用上述方法。
OnDateSetListener ondate= new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
millisSinceEpochStart = getMillis(year, monthOfYear, dayOfMonth);
}
};
...
OnDateSetListener ondateSecond = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
millisSinceEpochEnd = getMillis(year, monthOfYear, dayOfMonth);
}
};
关于java - 我有两个几乎相同的方法,如何重构它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37124323/