2012-11-07 4 views
5

사용자가 변경을 시작하자마자 datepicker의 변경 사항을 감지 할 수 있기를 원합니다. 그러나 나는 datrpickerdialog를 사용하고 싶지 않다. 왜 사람이 datePicker에서 날짜를 변경할 때 onDateSet (DatePicker arg0, int arg1, int arg2, int arg3)이 실행되지 않는지 알고 있습니까?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를 알 수있는 방법을 가지고 있기 때문에 OnDateSetListener를 지원하지 않습니다. 대화가 아니기 때문에 자신이 완료되었다고 생각할 때 자신을 결정해야합니다. 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(); 
         } 
        } 
       } 
     );