2012-05-04 3 views
0

Я новичок в андроиде, и я признаю, что не совсем понимаю, какой контекст применим к Android. Я понимаю немного, но не полностью. Я пытаюсь изменить Android Datepicker так, чтобы только день и месяц были в DatePickerDialog. Я попросил stackoverflow, и мне дали один ответ в виде трех кодовых блоков. Код ниже. Я проблема: я получаю одну ошибку на mDialog = new CustomDPDialog(getContext(), this, ... ошибка на getContext(). В нем указано, что getContext() не определено для onClickListener. Итак, глядя на приведенный ниже код, каково было бы исправление для getContext()? Создание метода getContext() действительно ухудшает код. И используя контекст, null вместо getContext(), this, стирает ошибку, но она не должна быть нулевой, она должна быть 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() 

Я рекомендую первый, так как getApplicationContext() может иногда вызывать проблемы

+0

nope, ни один не работал. Но я вижу, где вы идете с вашими рассуждениями. Я не думаю, что v.getContext работает, потому что он не хочет контекста представления, я думаю, что он хочет контекста DatePicker. Итак, теперь я пытаюсь использовать все переменные вместо v. Thaks для помощи! – kirktoon1882

+0

hmmm ... Я бы подумал, что v.getContext() будет работать в любом случае. Хорошо, дайте мне знать, что закончилось работой! – ByteMe

+1

со всеми предложениями Eclipse говорит: «Метод getContext (View.OnClickListener) не определен для нового типа View.OnClickListener() {}« Я не понимаю, какой бит кода не определен. – kirktoon1882

0

getActivity() должны сделать трюк для вас.

Смежные вопросы