2012-05-04 5 views
0

저는 Android에 익숙하지 않아 Android에 적용되는 컨텍스트가 무엇인지 완전히 이해하지 못한다고 인정합니다. 나는 조금 이해하지만, 완전히는 아니다. 안드로이드 Datepicker를 수정하여 DatePickerDialog에 하루와 월 만 표시되도록하려고합니다. 나는 stackoverflow에게 물었고 3 개의 코드 블록 형태로 하나의 답을 받았다. 코드는 다음과 같습니다. 제 문제는 , this에 오류가 하나 있습니다 ... 오류는 getContext()입니다. onClickListener에 대해 getContext()은 정의되지 않았습니다. 따라서 아래 코드를 보면 getContext()의 수정 사항은 무엇입니까? getContext() 메서드를 만들면 코드가 실제로 손상됩니다. 컨텍스트를 사용하면 getContext(), this, 대신 null이 오류를 지우지 만 null이 아니어야합니다. this이어야합니다.Android DatePicker의 컨텍스트

static final int ID_DATEPICKER = 0; 
private int myYear, myMonth, myDay; 
TextView dateDisplay; 
Dialog mDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    dateDisplay = (TextView)findViewById(R.id.dateDisplay); 

    Button datePickerButton = (Button)findViewById(R.id.datepickerbutton); 
    datePickerButton.setOnClickListener(datePickerButtonOnClickListener); 
    } 
private Button.OnClickListener datePickerButtonOnClickListener 
= new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     final Calendar c = Calendar.getInstance(); 
     mDialog = new CustomDPDialog(getContext(), this, 
     c.get(Calendar.YEAR), c.get(Calendar.MONTH), 
     c.get(Calendar.DAY_OF_MONTH)); 
     mDialog.show(); 
     DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView()); 
     if (dp != null) { 
     ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE); 
     } 
    } 

    class CustomDPDialog extends DatePickerDialog { 
     public CustomDPDialog(Context context, 
       OnDateSetListener callBack, int myYear, int myMonth, 
       int myDay) { 
       super(context, callBack, myYear, myMonth, myDay); 
       } 
     @Override 
     public void onDateChanged(DatePicker view, int year, int month, int day) { 
      super.onDateChanged(view, year, month, day); 
      mDialog.setTitle((month + 1) + "-" + day + "-"); 
     } 

    } 

    private DatePicker findDatePicker(ViewGroup group) { 
     if (group != null) { 
      for (int i = 0, j = group.getChildCount(); i < j; i++) { 
       View child = group.getChildAt(i); 
       if (child instanceof DatePicker) { 
        return (DatePicker) child; 
       } else if (child instanceof ViewGroup) { 
        DatePicker result = findDatePicker((ViewGroup) child); 
        if (result != null) 
         return result; 
       } 
      } 
     } 
     return null; 
    } 
}; 
} 

답변

0

v.getContext() 

또는

getApplicationContext() 

나는 가끔 당신을 위해 트릭을 할해야 문제

+0

아니요, 어느 쪽도 효과가 없습니다. 그러나 나는 당신이 당신의 추론과 함께 어디로 가고 있는지를 압니다. v.getContext는 뷰의 컨텍스트를 원하지 않기 때문에 작동하지 않는다고 생각합니다. DatePicker의 컨텍스트를 원한다고 생각합니다. 이제 v. Thaks 대신 모든 변수를 사용하려고 노력하고 있습니다. – kirktoon1882

+0

hmmm ... 나는 v.getContext()가 어느쪽으로 든 작동한다고 생각한다. 잘 일하는 것을 끝내었던 것을 나에게 알려주세요!! – ByteMe

+1

모든 제안 사항이있는 경우 이클립스에서 "메소드 getContext (View.OnClickListener)가 new 유형에 대해 정의되지 않았습니다. View.OnClickListener() {}"정의되지 않은 코드 비트를 undertsnad하지 않습니다. – kirktoon1882

0

getActivity()을 일으킬 수 있습니다() getApplicationContext 이후 처음 추천하려고합니다.

0

ActivityName.this이 작동해야합니다.