2012-12-12 25 views
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); 
} 

} 

所以在觸摸dateET這是它打開日期選擇一個EditText,我設置了新的日期,然後點擊設置,它不會被解僱,我點擊重新設置,即使現在它不會被擱置,爲什麼日期對話框,要求點擊三次駁回

+1

你可能會考慮更好的正是你的症狀是什麼解釋。 – CommonsWare

+0

是的,添加了描述。 –

+1

您是否確定在觸摸「EditText」時沒有啓動多個對話框?只有當另一個實例當前不可見時,纔可以通過緩存'datePickDialog'並在'onTouch'中創建一個新的測試來輕鬆地進行測試。 – Luksprog

回答

3

onTouch接收三個事件(正常順序)當我點擊設置第3次最終它被駁回:

MotionEvent.ACTION_DOWN 
MotionEvent.ACTION_MOVE 
MotionEvent.ACTION_UP 

既然你不檢查任何人(並返回true),你的代碼被執行3次(每個事件一次)。

解決方案:

使用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; 
} 
+0

您可以請解釋:** MotionEvent.ACTION_DOWN **是爲了?我的意思是它與其他2有什麼不同? –

+0

@ Archie.bpgc:'ACTION_DOWN'是最初觸摸屏幕的手指。 'ACTION_MOVE'是在屏幕上滑動的已經下滑的手指。 'ACTION_UP'是離開屏幕的手指。 – CommonsWare

+0

非常感謝:) –

相關問題