1
public class QuickIWantActivity extends Activity implements
        OnDateSetListener {
.....
.....
.....

dateET.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

Calendar cal = Calendar.getInstance();
DatePickerDialog datePickDiag = new DatePickerDialog(
        QuickIWantActivity.this, QuickIWantActivity.this, cal
            .get(Calendar.YEAR), cal.get(Calendar.MONTH),
        cal.get(Calendar.DAY_OF_MONTH));
        datePickDiag.show();
        return true;
        }
    });

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {

    int month = monthOfYear + 1;
    dateET.setText(dayOfMonth + "- " + month + "- " + year);
}

}

したがって、EditTextであるdateETに触れると、日付ピッカーが開き、新しい日付を設定して[設定]をクリックすると、却下されません。もう一度[設定]をクリックすると、却下されません。最後に、[設定]をクリックすると却下されます。 3回目

4

1 に答える 1

3

onTouch3つのイベントを受け取ります(通常のシーケンス):

MotionEvent.ACTION_DOWN
MotionEvent.ACTION_MOVE
MotionEvent.ACTION_UP

そして、それらのいずれもチェックしていない(そしてtrueを返している)ので、コードは3回(イベントごとに1回)実行されます。

解決:

使用するonClick()か(これは私が行うことです)、またはチェックを追加します:

@Override
public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) { 
  case MotionEvent.ACTION_DOWN:

Calendar cal = Calendar.getInstance();
DatePickerDialog datePickDiag = new DatePickerDialog(
        QuickIWantActivity.this, QuickIWantActivity.this, cal
            .get(Calendar.YEAR), cal.get(Calendar.MONTH),
        cal.get(Calendar.DAY_OF_MONTH));
        datePickDiag.show();
        return false;
        }
    });
break;
}
于 2012-12-12T13:38:54.797 に答える