Я запускаю свое первое приложение для Android, и у меня есть Fragment, который добавляется в мой Activity в методе Activity onCreate(). Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти ни одного из представлений, содержащихся в Fragment, из метода Activity onCreate().
Другие потоки предположили, что это связано с тем, что Fragment еще не завышен, поэтому findViewById() возвращает null для любых представлений, содержащихся в Fragment.
Вот что я имею в виду:
Активность:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("activity onCreate");
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
return;
}
initialiseUI(); // Fragment added to Activity
System.out.println("end of activity onCreate");
}
Fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
return inflater.inflate(R.layout.event_log, container, false);
}
Это выводит результаты:
активность onCreate конец действия onCreate фрагмент onCreateView
Из-за этого порядка любая попытка доступа к представлениям Fragment в методе Activity onCreate() (с использованием findViewById()) создает NullPointerException, так как Fragment onCreateView() получает только называемый ПОСЛЕ окончания Activity onCreate().
Использование FragmentManger executePendingTransactions() после добавления Fragment не помогает.
В принципе, я был вынужден помещать код проблемы в метод Activity onStart() вместо onCreate(), так как onStart() происходит ПОСЛЕ Fragment onCreateView().
Кто-нибудь, что представляет собой стандартная практика, или как я могу сделать свой код доступа к фрагментам в рамках метода Activity onCreate()?