Android 同一活动中的两个日期选择器
我有一个活动,我需要接受两个日期,一个开始日期和一个结束日期。我有两个按钮,点击后会显示日期选择器。输入日期后,我需要使用SharedReferences存储此日期。我正在使用本教程: 我见过两个日期选择器的问题,但没有一个使用DialogFragment。他们使用的是不推荐使用的函数,我真的不想使用这些函数,因为我听说最好使用DialogFragment 现在我该怎么处理两个约会挑肥拣瘦的人?如何知道在onDateSet函数中单击了哪个按钮(开始按钮或结束按钮)?是否有方法将视图id存储在我单击按钮时创建的对话框片段中,以便我可以在onDateSet中访问它Android 同一活动中的两个日期选择器,android,android-dialogfragment,android-datepicker,Android,Android Dialogfragment,Android Datepicker,我有一个活动,我需要接受两个日期,一个开始日期和一个结束日期。我有两个按钮,点击后会显示日期选择器。输入日期后,我需要使用SharedReferences存储此日期。我正在使用本教程: 我见过两个日期选择器的问题,但没有一个使用DialogFragment。他们使用的是不推荐使用的函数,我真的不想使用这些函数,因为我听说最好使用DialogFragment 现在我该怎么处理两个约会挑肥拣瘦的人?如何知道在onDateSet函数中单击了哪个按钮(开始按钮或结束按钮)?是否有方法将视图id存储在我
任何帮助都会很好,谢谢。可以这样做:
View.OnClickListener showDatePicker = new View.OnClickListener() {
@Override
public void onClick(View v) {
final View vv = v;
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (vv.getId() == R.id.StartDate //id of your StartDate button) {
//do the stuff
} else //EndDate button was clicked {
//do the stuff
}
}
}, year, month, day);
datePickerDialog.show();
}
};
startDate.setOnClickListener(showDatePicker);
endDate.setOnClickListener(showDatePicker);
这里的主要思想是存储
视图
激发的OnClickEvent
(在您的例子中是按钮)并将该视图的ID与按钮的ID进行比较为了避免此类问题,您可以创建实现接口的内部类,好好想想OOP,因此,您可以做任何您想做的事情,而无需检查它是第一个还是第二个,例如:
class innerFirstDate implements DatePickerDialog.OnDateSetListener{
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//Doing thing with first Date pick Dialog
}
}
class innerSecondDate implements DatePickerDialog.OnDateSetListener{
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//Doing thing with second Date Picker Dialog
}
}
稍后,您可以为第一个执行以下操作:
DatePickerDialog firstD = new DatePickerDialog(getActivity(), new innerFirstDate(), year, month, day).show();
第二个:
DatePickerDialog secondD = new DatePickerDialog(getActivity(), new innerSecondDate(), year, month, day).show();
一切都变得很清楚
public void onClick(View v) {
d1= 1;
d2=2;
DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
dialog.show();
}
public void onDateSet(DatePicker view, int year, int month, int day) {
if(d1==1) {
e2.setText(Integer.toString(day)+"/"+Integer.toString(month+1)+"/"+Integer.toString(year));
}
if(d2==1) {
e3.setText(Integer.toString(day)+"/"+Integer.toString(month+1)+"/"+Integer.toString(year));
}
}
public void onClick1(View v) {
d2=1;
d1=2;
DatePickerDialog dialog = new DatePickerDialog(this, this,2013,2, 18);
dialog.show();
}
它工作得很好我想到了这一点,是的,但我认为更有效的方法是只为两个选择器使用一个内部类,对吗?你也可以,但是在你有很多代码并且检查是第一个还是第二个以及使用flag之后,只使用一个内部类可能会让人困惑。记住,保持简单但高效,同时创建两个不同的内部类,因为这对性能来说不是很大的影响,所以这样做没有问题if-else上的注释缺少了一个封闭的圆括号,if)open curly{missing.else缺少open curly大括号{