我有一个带有两个按钮的活动,它们调用相同的 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" />
我认为这与焦点冲突,但我使用了
机器人:可聚焦=“假”
和
安卓:focusableInTouchMode = “假”
两个按钮。我在视图中没有任何其他可点击的项目...
我什至尝试为按钮制作两种不同的方法,两个不同的选择器和两个不同的 onDateSetListener;什么也没有变!
对不起,如果我不是很清楚,但我是意大利人......
所以,提前感谢您的每一个帮助!