Я все еще озадачен тем фактом, что Google добавляет метод в API Android, который иногда работает, а иногда нет; а именно Fragment.getActivity()
. Я знаю, я могу проверить, если результат null
, а также есть метод isAdded()
. Тем не менее, как мне поступить, если эти проверки имеют отрицательный результат? Когда я зашел так далеко, есть причина, по которой я хочу получить доступ к Activity
, например, получить доступ к Resources
или Preferences
или сделать одну из миллиарда вещей, для которых в Android требуется Context
.
Я просто не мог делать то, что собирался сделать. Тем не менее, я думаю, что было бы плохо для пользователя, если мое приложение иногда выполняет действие, выбранное пользователем, а иногда нет. На самом деле, я думаю, что если бы мое приложение просто рухнуло, это было бы не намного хуже.
Или я мог бы рассказать пользователю об отключенном действии и что он должен повторить попытку позже. Но подождите, Toast
требуется Context
, поэтому я даже не могу этого сделать.
Или я должен просто подождать, пока действие будет прикреплено вот так?
Activity activity = getActivity();
while (activity == null) {
Thread.sleep(10);
activity = getActivity();
}
(я не всерьез предлагаю это, я просто хочу показать, насколько я в отчаянии)
Может быть, я думаю об этом все неправильно. Может быть, я пытаюсь делать вещи неправильно. Может быть, есть школа мысли о том, как использовать фрагменты, о которых я не слышал. Однако, если мне следует избегать доступа к Activity
в Fragment
, почему метод getActivity()
вообще существует?
Особая проблема, с которой я сейчас борюсь, заключается в том, что в PreferenceFragment
в OnSharedPreferenceChangeListener
я хочу дать пользователю Toast
сообщение:
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
Это работает большую часть времени, но иногда дает сбой, потому что getActivity()
вернул null
.