Я запускаю свое первое приложение для 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()
?