我有這個類,其示出爲10分鐘間隔的時間選擇器:爲什麼我在Android 4.0.3中獲取TimePicker NullPointerException?
public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
// Convert current minutes to tens
// 55 = 50, 56 = 00
int minute = c.get(Calendar.MINUTE)/10;
minute = (minute > 5) ? 0 : minute;
final TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
tpd.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
int tpLayoutId = getResources().getIdentifier("timePickerLayout", "id", "android");
ViewGroup tpLayout = (ViewGroup) tpd.findViewById(tpLayoutId);
ViewGroup layout = (ViewGroup) tpLayout.getChildAt(0);
// Customize minute NumberPicker
NumberPicker minutePicker = (NumberPicker) layout.getChildAt(2);
minutePicker.setDisplayedValues(new String[]{"00", "10", "20", "30", "40", "50"});
minutePicker.setMinValue(0);
minutePicker.setMaxValue(5);
}
});
return tpd;
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
minute = minute * 10;
// Do something with the time chosen by the user
final String selectedDate = String.valueOf(hourOfDay) + ":" + String.valueOf(minute);
EditText selectedTimeTxt = (EditText) getActivity().findViewById(R.id.selectedTime);
selectedTimeTxt.setText(selectedDate);
}
}
該代碼是可以正常使用的機器人Lollipop
,但是當我在仿真器上運行它,或真正的設備運行Android 4.0.3
它拋出但以下情況除外:
java.lang.NullPointerException
對此行:ViewGroup layout = (ViewGroup) tpLayout.getChildAt(0);
錯誤是明顯的多,但我不能看到佈局組件的ID,因爲在Device monitor
屏幕捕獲是不t支持API 15.
你能給我一個推動力嗎?爲什麼我得到這個錯誤?缺少什麼佈局ID?我很確定很多開發者面臨同樣的問題。我知道我在這裏錯過了一小部分,但我無法發現它。
看來tpLayout沒有被提供的id找到。你沒有使用任何需要高API版本的東西嗎?如果你只是將'R.id.timePickerLayout'傳遞到'findViewById'中,會發生什麼? – 2015-02-09 12:24:18
我沒有使用更高的API – Slim 2015-02-09 12:25:24