Как я могу обнаружить изменение фрагмента контейнера?
Я использую нижнее представление навигации в своем приложении и имею несколько фрагментов, которые мой пользователь переключает, и все они отображаются в одном контейнере. Я хочу обнаружить изменение во фрагменте, чтобы я мог изменять различные свойства панелей инструментов для каждого фрагмента и контролировать, отображается ли нижняя панель навигации.
это код, который я думал использовать и просто вызвать метод при переходе, но в настоящее время он не работает, так как я получаю исключение нулевой ссылки для 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?
Спасибо
Это внутри основного действия, и я просто вызову этот метод перед транзакцией, поэтому я ищу правильный способ сделать это.
Итак, насколько я понимаю, все, что вам нужно, - это какой фрагмент сейчас загружен на экран, верно?
да, я хотел бы знать это, но моя основная задача - обнаружить изменение во фрагменте @ G.hakim
Так как именно вы планируете обнаруживать это, я имею в виду, на каком мероприятии?
@ G.hakim вот что мне интересно, есть ли способ сделать это? для кнопки «Назад» на панели инструментов и в нижнем навигационном представлении мне сейчас нужно запустить метод в основном действии, так как я не мог получить кнопку «Назад» на панели инструментов для работы с фрагментом
Я могу дать вам решение для получения текущего отображаемого имени фрагмента, если вы вызовете эту функцию, вы сможете узнать, какой фрагмент отображается





Все, что нужно этой функции, - это ваш текущий экземпляр активности, чтобы получить текущий фрагмент.
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;
}
спасибо, что потратили свое время на это, но я обнаружил, что работаю вокруг, что, кажется, работает нормально
Я бы предположил, что фрагменты находятся вне поля зрения и являются
destroyedи являютсяnull. Как вы обнаружите «изменение» в ваших фрагментах? Так или иначе вам нужно связать ваши фрагменты и нижнюю часть.