同じ DatePicker を呼び出す 2 つのボタンを持つアクティビティがあります。私の活動は、日付の間隔を処理する必要があります。1 つのボタンは「開始日」の設定に使用され、もう 1 つのボタンは「終了日」の設定に使用されます。
アクティビティの onCreate の直後に、必要なボタンをクリックするとうまく機能します。DatePicker が適切に呼び出され、スムーズに進みます。肯定的なボタンをクリックすると、期待どおりに実行する必要があるすべての作業が行われますが、datePicker を再度呼び出したい場合は、ボタンを初めてクリックしたときに何もしないため、2 回クリックする必要があります。
要約すると、次のようになります。
- 1 つのボタンをクリックします。それはうまくいきます
- 否定ボタンをクリックします。それはすべて期待どおりに機能します
- もう一度クリックします。再び正常に動作します
- 肯定的なボタンをクリックします。できます
- 1 つのボタン (2 つのいずれか) をクリックします。押された状態のボタンを短時間表示する以外は何も行われません
- もう一度クリックします。それは期待どおりに動作します
これが私のコードです:
public class MyActivity extends 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"
両方のボタンに。ビューには他にクリック可能なアイテムがありません...
ボタン用に 2 つの異なるメソッド、2 つの異なるピッカー、2 つの異なる onDateSetListener を作成してみました。何も変わっていません!
私はイタリア人ですが、よくわからない場合は申し訳ありません...
だから、すべての助けを前もって感謝します!