В моем приложении у меня есть 7 фрагментов, которые привязаны к одной и той же активности. В некоторых из них есть AdViews, которые я хочу предварительно загрузить сразу после запуска Activity, также есть некоторые методы внутри фрагментов, которые должны быть запущены, прежде чем фрагмент станет видимым для пользователя.
Ранее я использовал ViewPager для достижения желаемого результата, который работал отлично, но недавно я заменил ViewPager компонентом навигации по причине, которая не важна для контекста. С тех пор код внутри метода onActivityCreated
вызывается не тогда, когда действие действительно создается, а когда фрагмент виден пользователю. Это почему? Я думал, что фрагменты загружаются, как только загружается действие. Как я могу предварительно загрузить представления (AdView) с фрагментом навигации? Не является ли жизненный цикл фрагмента в компоненте навигации полностью неактуальным, когда все они вызываются, когда фрагмент становится видимым?
Возможно ли это даже с компонентами навигации?
Вот моя MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
// This is important to set the startDestination programmatically
NavHostFragment navHost = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
NavController navController = navHost.getNavController();
NavInflater navInflater = navController.getNavInflater();
NavGraph graph = navInflater.inflate(R.navigation.nav_graph);
gameRef.document(gameId).collection("Round").document("Round")
.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) {
if (snapshot != null && snapshot.exists()) {
roundValue = snapshot.getLong("round").intValue();
if (roundValue == 0) {
graph.setStartDestination(R.id.fragmentCategory);
} else {
graph.setStartDestination(R.id.fragmentOneCategory);
}
navController.setGraph(graph);
}
}
});
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
}
...
Вот фрагмент с AdView:
...
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
AdView mAdView = getView().findViewById(R.id.adViewFragment1);
mAdView.setAdListener(mAdListener);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
answersPlayer2();
navController = Navigation.findNavController(view);
}
...