Как предварительно загрузить представления и запустить методы, прежде чем фрагмент станет видимым с компонентами навигации? - PullRequest
0 голосов
/ 26 марта 2020

В моем приложении у меня есть 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);

    }
...
...