我有一个带有两个按钮的活动,它们调用相同的DatePicker。 我的活动必须处理一个日期间隔。一个按钮用于设置“从”日期,另一个按钮用于设置“到”日期。
在活动的onCreate之后,如果我单击我想要的任何按钮它运行良好:它正确调用DatePicker并且它顺利进行。如果我单击肯定按钮它会按预期完成所有工作,但是如果我想再次调用datePicker,我必须单击两次,因为我第一次点击一个按钮它什么都不做。
所以,总结一下:
这是我的代码:
公共类MyActivity扩展了ListActivity {
private int mYear;
private int mMonth;
private int mDay;
private Date fromDate, toDate;
private Button fromBtn, toBtn;
Calendar cal;
DatePickerDialog datePicker;
static final int DATE_DIALOG_ID = 0;
private int pressedBtn=-1; // 0=from & 1=to
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myLayout);
cal = Calendar.getInstance();
mYear = cal.get(Calendar.YEAR);
mMonth = cal.get(Calendar.MONTH);
mDay = cal.get(Calendar.DAY_OF_MONTH);
cal.add(Calendar.MONTH, +1);
this.toDate = cal.getTime();
cal.add(Calendar.MONTH, -2);
this.fromDate = cal.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
fromBtn = (Button) findViewById(R.id.frombtn);
fromBtn.setText(dateFormat.format(fromDate));
toBtn = (Button) findViewById(R.id.tobtn);
toBtn.setText(dateFormat.format(toDate));
datePicker = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
updateDisplay();
}
public void setData(View target) {
switch(target.getId()) {
case R.id.frombtn:
pressedBtn = 0;
cal.setTime(fromDate);
break;
case R.id.tobtn:
pressedBtn = 1;
cal.setTime(toDate);
break;
}
mYear = cal.get(Calendar.YEAR);
mMonth = cal.get(Calendar.MONTH);
mDay = cal.get(Calendar.DAY_OF_MONTH);
datePicker.updateDate(mYear, mMonth, mDay);
showDialog(DATE_DIALOG_ID);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return datePicker;
}
return null;
}
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
};
private void updateDisplay() {
Date date = new Date(mYear-1900, mMonth, mDay);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
if(this.pressedBtn==0) {
this.fromDate = data;
daBtn.setText(dateFormat.format(fromDate));
}
else if(this.pressedBtn==1){
this.toDate = data;
aBtn.setText(dateFormat.format(toDate));
}
toDate.setHours(23);
toDate.setMinutes(59);
toDate.setSeconds(59);
fromDate.setHours(0);
fromDate.setMinutes(0);
fromDate.setSeconds(0);
//riparte storico
progDialog = ProgressDialog.show(MyActivity.this, "", "Doing stuff with dates...", true, true);
Thread thrd = new Thread()
{
public void run() {
...
}
};
thrd.start();
}
}
这是布局:
<Button
android:id="@+id/frombtn"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@drawable/textedit_state"
android:onClick="setData" />
<Button
android:id="@+id/tobtn"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@drawable/textedit_state"
android:onClick="setData" />
我认为这与焦点相矛盾,但我使用了
android:focusable =“false”
和
android:focusableInTouchMode =“false”
两个按钮都是。我在视图中没有任何其他可点击的项目......
我甚至尝试为按钮设置两种不同的方法,两种不同的选择器和两种不同的onDateSetListener;一切都没有改变!
对不起,如果我不是很清楚,但我是意大利人......
所以,提前感谢您的帮助!