Обнаружить изменение во фрагменте

Как я могу обнаружить изменение фрагмента контейнера?

Я использую нижнее представление навигации в своем приложении и имею несколько фрагментов, которые мой пользователь переключает, и все они отображаются в одном контейнере. Я хочу обнаружить изменение во фрагменте, чтобы я мог изменять различные свойства панелей инструментов для каждого фрагмента и контролировать, отображается ли нижняя панель навигации.

это код, который я думал использовать и просто вызвать метод при переходе, но в настоящее время он не работает, так как я получаю исключение нулевой ссылки для bottomNavigation и suppoortActionBar.

    public void ChangeInFragment(string fragment)
    {
        bool IsMain = true;

        switch (fragment)
        {
            case "homefrg" :
                IsMain = true;
                break;

            case "favfrg" :
                IsMain = true;
                break;

            case "morefrg":
                IsMain = true;
                break;

            case "splitfrg":
                IsMain = false;
                break;

            case "wattfrg":
                IsMain = false;
                break;

            case "weightfrg":
                IsMain = false;
                break;
        }

        if (IsMain == true)
        {
            bottomNavigation.Visibility = ViewStates.Visible;
            SupportActionBar.SetDisplayHomeAsUpEnabled(false);
            SupportActionBar.SetDisplayShowHomeEnabled(false);
        }
        else
        {
            bottomNavigation.Visibility = ViewStates.Invisible;
            SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            SupportActionBar.SetDisplayShowHomeEnabled(true);
        }
    }

это, вероятно, не лучший способ сделать это, но если нет способа обнаружить изменение во фрагменте, может ли кто-нибудь объяснить, почему нижняя навигация и панель инструментов возвращают значение null?

Спасибо

Я бы предположил, что фрагменты находятся вне поля зрения и являются destroyed и являются null. Как вы обнаружите «изменение» в ваших фрагментах? Так или иначе вам нужно связать ваши фрагменты и нижнюю часть.

Haroun Hajem 20.09.2018 22:54

Это внутри основного действия, и я просто вызову этот метод перед транзакцией, поэтому я ищу правильный способ сделать это.

euandeas 21.09.2018 07:58

Итак, насколько я понимаю, все, что вам нужно, - это какой фрагмент сейчас загружен на экран, верно?

FreakyAli 21.09.2018 09:27

да, я хотел бы знать это, но моя основная задача - обнаружить изменение во фрагменте @ G.hakim

euandeas 21.09.2018 17:00

Так как именно вы планируете обнаруживать это, я имею в виду, на каком мероприятии?

FreakyAli 21.09.2018 17:10

@ G.hakim вот что мне интересно, есть ли способ сделать это? для кнопки «Назад» на панели инструментов и в нижнем навигационном представлении мне сейчас нужно запустить метод в основном действии, так как я не мог получить кнопку «Назад» на панели инструментов для работы с фрагментом

euandeas 21.09.2018 17:14

Я могу дать вам решение для получения текущего отображаемого имени фрагмента, если вы вызовете эту функцию, вы сможете узнать, какой фрагмент отображается

FreakyAli 21.09.2018 19:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
260
1

Ответы 1

Все, что нужно этой функции, - это ваш текущий экземпляр активности, чтобы получить текущий фрагмент.

 public Android.Support.V4.App.Fragment GetVisibleFragment(AppCompatActivity appCompatActivity)
    {
        Android.Support.V4.App.FragmentManager fragmentManager = appCompatActivity.SupportFragmentManager;
        IList<Android.Support.V4.App.Fragment> fragments = fragmentManager.Fragments;
        if (fragments != null)
        {
            foreach (Android.Support.V4.App.Fragment fragment in fragments)
            {
                if (fragment != null && fragment.IsVisible)
                    return fragment;
            }
        }
        return null;
    }

спасибо, что потратили свое время на это, но я обнаружил, что работаю вокруг, что, кажется, работает нормально

euandeas 21.09.2018 19:37

Другие вопросы по теме