2

Я разрабатываю приложение для Android для всех версий (версии от 2.2 до 4.2). Я использую Datepicker в ней и изменить цвет выбранной даты к белому, используя следующий код:Проблема DatePicker в android 4.1 и 4.2

if (currentapiVersion >= 14) { 

    ViewGroup dayChildpicker = (ViewGroup) datePicker 
      .findViewById (Resources.getSystem().getIdentifier("day", "id", "android")); 
    ViewGroup monthChildpicker = (ViewGroup) datePicker 
      .findViewById(Resources.getSystem().getIdentifier("month", "id", "android")); 
    ViewGroup yearChildpicker = (ViewGroup) datePicker 
      .findViewById(Resources.getSystem().getIdentifier("year", "id", "android")); 

    EditText dayET = null; 
    EditText mornthET = null; 
    EditText yearET = null; 

    dayET = (EditText) dayChildpicker.getChildAt(1); 
    mornthET = (EditText) monthChildpicker.getChildAt(1); 
    yearET = (EditText) yearChildpicker.getChildAt(1); 

    dayET.setTextColor(Color.WHITE); // null pointer error on this line 
    mornthET.setTextColor(Color.WHITE); 
    yearET.setTextColor(Color.WHITE); 
} 

Но это бросает исключения нулевого указателя в Android 4.1 и 4.2 (Jelly Beans) на линии

dayET.setTextColor(Color.WHITE); 

В Jelly beans, я не получаю Редактировать текстовый вид в datepicker.

Что такое метод, чтобы получить дочерние элементы выбора даты в jellybeans и как изменить цвет текста выбранной даты в подборщике даты.

Прошу вас, руководствоваться.

+0

Можете ли вы добавить stacktrace и указать, в какой строке кода вы получаете NPE? – Kirk

+0

Привет Кирк, я получаю NPE в dayET.setTextColor (Color.WHITE); В jelly bean dayET = (EditText) dayChildpicker.getChildAt (1); этот код не возвращает никакого вида EditText. Я не знаю почему ? –

ответ

0

Я не уверен, что getChildAt(1) фактически получает контроль, так как не может быть никакой гарантии, какой заказ находится в ViewGroup. Однако вы должны быть в состоянии ссылаться на них по-разному через идентификатор

Изменить эти

dayET = (EditText) dayChildpicker.getChildAt(1); 
mornthET = (EditText) monthChildpicker.getChildAt(1); 
yearET = (EditText) yearChildpicker.getChildAt(1); 

К этим

dayET = (EditText) dayChildpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); 
mornthET = (EditText) monthChildpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); 
yearET = (EditText) yearChildpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); 

Это позволит вам ссылаться на них должным образом без нулевой ошибки указателя.

Дайте мне знать, если у вас есть другие вопросы или это не сработает.

+0

Приведенный выше код не работает. Он бросает NPE на той же линии. Теперь в Android 4.0, а также 4.2 –

+0

Хмм. Попробуйте в последний раз, заменив 'timepicker_input' на' numberpicker_input'. Если нет, вам может потребоваться создать собственный виджет 'DatePicker', чтобы открыть виджеты EditText. Код для этого: Kirk

+0

Спасибо. numberpicker_input разрешает NPE, но в ANdroid 4.2 цвет текста селектированной даты не превращается в белый, он изменился на цвет по умолчанию (черный). Я также сделал это, используя отдельные условия для 4.0 и 4.2. Для 4.0 я использовал dayET = (EditText) dayChildpicker.getChildAt (1); и для 4.2 я использовал dayET = (EditText) dayChildpicker.getChildAt (0); Это также не бросает NPE, но в 4.2 возвращает объект, но не вид EditTeXt. В вашем случае эта проблема такая же. Я не понимаю, почему Android версии 4.0 перенастраивает объект EditText, но Android 4.2 не удаляет объект EditText? –