Альтернативный способ доступа к объектам NumberPicker TimePickerDialog, чем Class.forName - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать пользовательский TimePickerDialog с пользовательскими интервалами для часов и минут, и мне удалось решить его, используя ответ из на этот вопрос .

Проблема в том, чтоAndroid Studio отображает следующее предупреждение:

Доступ к внутренним API-интерфейсам через отражение не поддерживается и может работать не на всех устройствах или в будущем. Использование рефлексии для доступа к скрытым / частным API-интерфейсам Android небезопасно;он часто не будет работать на устройствах других производителей, и он может внезапно перестать работать [...]

Проблема в первой строке:

Class<?> classForid = Class.forName("com.android.internal.R$id");

Field timePickerField = classForid.getField("timePicker");
TimePicker mTimePicker = findViewById(timePickerField.getInt(null));
Field minuteField = classForid.getField("minute");
Field hourField = classForid.getField("hour");
NumberPicker minutePicker = mTimePicker.findViewById(minuteField.getInt(null));
NumberPicker hourPicker = mTimePicker.findViewById(hourField.getInt(null));

Мне нужно немногоальтернативный способ доступа к двум NumberPicker объектам.

1 Ответ

0 голосов
/ 10 октября 2019

Я нашел решение, используя Resources.getSystem().getIdentifier().

Код теперь выглядит так:

TimePicker timePicker = findViewById(Resources.getSystem().getIdentifier(
    "timePicker", 
    "id", 
    "android"
));

NumberPicker minutePicker = timePicker.findViewById(Resources.getSystem().getIdentifier(
    "minute", 
    "id", 
    "android"
));

NumberPicker hourPicker = timePicker.findViewById(Resources.getSystem().getIdentifier(
    "hour", 
    "id", 
    "android"
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...