2

同じ 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 を作成してみました。何も変わっていません!

私はイタリア人ですが、よくわからない場合は申し訳ありません...

だから、すべての助けを前もって感謝します!

4

0 に答える 0