2012-11-07 23 views
5

Tôi muốn có thể phát hiện các thay đổi trên datepicker ngay sau khi người dùng bắt đầu thay đổi nó. Tuy nhiên tôi không muốn sử dụng datrpickerdialog. Có ai biết tại sao các onDateSet (DatePicker arg0, int arg1, int arg2, int arg3) không cháy khi tôi thay đổi ngày trên datepicker?Làm thế nào để sử dụng OnDateChangedListener, OnDateSetListener mà không sử dụng datepickerdialog?

Tôi đánh giá cao mọi nhận xét về điều đó. Cheers

Dưới đây là phiên bản đơn giản hóa của mã của tôi:

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"); 
} 

}

Trả lời

6

Bạn cần phải nói với DatePicker về OnDateChangedListener của bạn. Không giống như các tiện ích thông thường, DatePicker không có setOnDateChangedListener() ... nhưng nó có init(). Sử dụng init() để thiết lập ngày mặc định và tuyên bố người nghe với nhau:

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

Bạn sẽ cần phải gọi phương thức init(year, month, day, onDateChangedListener) trên DatePicker của bạn để thiết lập nó, nếu bạn muốn được thông báo chủ động tương tác.

Giả sử bạn muốn khởi tạo nó để hiển thị một ngày cụ thể để bắt đầu, bạn nên gọi nó thay vì phương thức updateDate (đó là những gì bạn đang làm? Hay bạn không quan tâm giá trị khởi đầu là gì?)

Lưu ý rằng nó không hỗ trợ OnDateSetListener theo cách DatePickerDialog thực hiện, vì điều đó có nghĩa là giao diện người dùng có một số cách để biết khi nào người dùng được thực hiện tương tác với bộ chọn. Vì nó không phải là một hộp thoại, bạn phải tự quyết định khi bạn nghĩ rằng chúng đã hoàn thành. Chỉ cần theo dõi với OnDateChangedListener, và nó sẽ có ý nghĩa.

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(); 
         } 
        } 
       } 
     ); 
Các vấn đề liên quan