我有一项活动,我需要接受两个日期,开始日期和结束日期。我有两个按钮,点击它们会显示日期选择器。输入日期后,我需要使用SharedPreferences存储此日期。我正在使用本教程:
http://developer.android.com/guide/topics/ui/controls/pickers.html
我在两个日期选择器上看到了问题,但没有一个使用DialogFragment。他们使用已弃用的函数,我真的不想使用它们,因为我听说最好使用DialogFragment。
现在我如何选择两个日期选择器?我怎么知道在onDateSet函数中点击了哪个按钮(startButton或endButton)?有没有办法在我点击按钮时创建的DialogFragment中存储视图ID,以便我可以在onDateSet中访问它?
任何帮助都会很棒,谢谢。
答案 0 :(得分:10)
可以这样做:
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);
此处的主要想法是存储View
已解雇OnClickEvent
(在您的案例按钮中),并将该视图的ID与按钮的ID进行比较
答案 1 :(得分:1)
为了避免这种问题,你可以创建实现接口的内部类,想想好的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();
一切都变得清晰
答案 2 :(得分:0)
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();
}
它的工作完美