2

DatePickerDialog를 사용하여 텍스트보기에서 선택한 날짜를 가져와야합니다. textview를 클릭하면 DatePickerDialog가 나타납니다. 날짜 선택 대화 상자 수신기

나는이

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
     datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear)); 
    } 
}; 

datePick = (TextView) findViewById(R.id.date_pick); 

    datePick.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Calendar calendar = Calendar.getInstance(); 
      year = calendar.get(Calendar.YEAR); 
      monthOfYear = calendar.get(Calendar.MONTH); 
      dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); 
      new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth); 
     } 
    }); 

하지만 그 작동하지를 썼다. 그래서 내가 인터넷 검색을 사용하여이 기능과 작동 방식을 변경했지만 왜 그렇게 이해할 수 없습니까? 위의 코드

datePick = (TextView) findViewById(R.id.date_pick); 

    datePick.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Calendar calendar = Calendar.getInstance(); 
      year = calendar.get(Calendar.YEAR); 
      monthOfYear = calendar.get(Calendar.MONTH); 
      dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     // set date picker as current date 
     return new DatePickerDialog(this, dateOnDateSetListener, 
        year, monthOfYear,dayOfMonth); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { 
     datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear)); 
    } 
}; 

답변

0

하지만 그 작동하지 내가 엉망 뭔가를했다. 그래서 약간의 인터넷 검색으로 이걸 바꿔서 작동하지만 왜 그렇게 이해할 수 없습니까? 나는 혼란을 위의 코드에서 짓을

하지 않으 셨습니다 정말 엉망 아무것도까지, 당신은 단지 대화에 .show()를 호출하는 것을 잊었다; Activity이 대화 상자를 관리하고, 따라서 onCreateDialog(int id) 반환됩니다 대화 상자에서 해당 메소드를 호출 처리됩니다 때문에 즉 :

new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show(); 

는 두 번째 코드에 .show()없이 작동하는 이유입니다.

일반적으로 대화 상자의 라이프 사이클을 직접 관리하지 않으려면 두 번째 방법을 사용하는 것이 좋습니다. 간단히 말해서 구성 변경 등으로 활동을 재현 할 때 문제가 발생하기 쉽기 때문입니다. 조각을 사용하는보다 현대적인 솔루션을 원한다면 대화 상자를 DialogFragment에 포장해야합니다 (이전 Honeycomb 장치에서 작동하는 지원 라이브러리에 버전이 있습니다).

+1

OMG ... 그런 어리석은 실수. 고마워요. – Ashish0294

관련 문제