2012-11-07 33 views
5

我希望能夠在用戶開始更改日期檢測器時檢測到日期選擇器上的更改。但是我不想使用datrpickerdialog。有誰知道爲什麼onDateSet(DatePicker arg0,int arg1,int arg2,int arg3)在更改datepicker上的日期時不會觸發?如何在不使用datepickerdialog的情況下使用OnDateChangedListener,OnDateSetListener?

我非常感謝對此的評論。 乾杯

這裏是我的代碼的簡化版本:

public class AddItem extends Activity implements OnDateChangedListener,OnDateSetListener{ 

DatePicker start ; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.entryelements); 
    start = (DatePicker) findViewById(R.id.start); 

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

    // TODO Auto-generated method stub 
    Toast.makeText(getApplicationContext(), 
      " thiv view"+year, 
      Toast.LENGTH_LONG).show(); 
    Log.v("indatechange", "ok"); 

} 

@Override 
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    Toast.makeText(getApplicationContext(), 
      " thiv view"+arg0, 
      Toast.LENGTH_LONG).show(); 
    Log.v("indatechange", "ok"); 
} 

}

回答

6

你需要告訴你的OnDateChangedListener的DatePicker的。與常規小部件不同,DatePicker沒有 setOnDateChangedListener() ...但它確實有init()。使用init()設置默認的日期和申報聽衆一起:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.entryelements); 

    // Set the date to now 
    Calendar calendar = Calendar.getInstance(); 
    start = (DatePicker) findViewById(R.id.start); 
    start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); 
} 
0

你需要調用你的DatePicker的init(year, month, day, onDateChangedListener)方法來進行設置,如果你想被告知積極互動。

假設你想初始化它以顯示一個特定的日期開始,這是有道理的,而不是它的updateDate方法(這是你在做什麼?或者你不關心起始值是什麼? )

請注意,它不像DatePickerDialog那樣支持OnDateSetListener,因爲這意味着UI有一些方法知道用戶何時完成與選擇器的交互。由於這不是對話,所以當你認爲他們完成時你必須決定自己。只需跟蹤OnDateChangedListener,它就會有意義。

0
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.entryelements); 
start = (DatePicker) findViewById(R.id.start); 

expirationDate=(EditText) findViewById(R.id.expirationDate); 
Calendar calendar = Calendar.getInstance(); 
start = (DatePicker) findViewById(R.id.start); 
MyOnDateChangeListener onDateChangeListener = new MyOnDateChangeListener(); 
start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), onDateChangeListener); 
} 

public class MyOnDateChangeListener implements OnDateChangedListener { 
    @Override 
    public void onDateChanged(DatePicker view, int year, int month, int day) { 
     int mon=month+1; 
     expirationDate.setText(day+"/"+mon+"/"+year); 
    } 
} 
0
DatePicker dpEndDate,dpStartDate; 
dpStartDate=(DatePicker)findViewById(R.id.dpStartDate); 
dpEndDate=(DatePicker)findViewById(R.id.dpEndDate); 
    Calendar today = Calendar.getInstance(); 
     dpStartDate.init(today.get(Calendar.YEAR), 
       today.get(Calendar.MONTH), 
       today.get(Calendar.DAY_OF_MONTH), 
       new DatePicker.OnDateChangedListener() { 
        @Override 
        public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
         SmartUtils.ting(MicaAttendanceFilter.this,"Start Date Changes"); 
         try { 
          SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd M yyyy"); 
          Calendar startCalendar = Calendar.getInstance(); 
          int startDay=dpStartDate.getDayOfMonth(); 
          int startMonth=dpStartDate.getMonth()+1; 
          int startYear=dpStartDate.getYear(); 
          String startDate = startDay+" "+startMonth+" "+startYear; 
          startCalendar.setTime(simpleDateFormat.parse(startDate)); 
          dpEndDate.setMinDate(startCalendar.getTimeInMillis()); 
         } catch (ParseException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
     ); 
相關問題