Нет официального материала для события OnTabReselected
для нижней навигации TabbedPage
или BottomNavigationView
, потому что для начала не используется TabLayout.Tab
.Многие переопределенные методы TabbedPageRenderer
не вызываются как SetTabIcon
.Если вы используете интерфейс IOnTabSelectedListener
(в качестве первой части кода), у вас есть три метода для использования.
void OnTabReselected(Tab tab);
void OnTabSelected(Tab tab);
void OnTabUnselected(Tab tab);
Но когда дело доходит до интерфейса BottomNavigationView
, у вас есть только два метода
void OnNavigationItemReselected
bool OnNavigationItemSelected
Итак, у нас нет встроенного OnTabUnselected
метода.Здесь вам нужно написать собственный код для создания невыбранного события.
Я пробовал этот код без использования пользовательского рендерера, используя 4 страницы вкладок и xaml вкладок, написанных в файле MailPage.xaml.Сначала объявите List<string>
в App.xaml.cs
файле для хранения Title
всех вкладок
public static List<string> Titles {get;set;}
Добавьте заголовок страницы вкладок в приведенном выше списке из MainPage.xaml.cs
метода OnAppearing
файла
protected override void OnAppearing()
{
for (int i = 0; i < this.Children.Count; i++)
{
App.Titles.Add(this.Children[i].Title);
}
}
Теперь перейдите к вашему MyTabbedPage
классу, в котором доступен общий проект.
public class MyTabbedPage : Xamarin.Forms.TabbedPage
{
string selectedTab = string.Empty;
string unSelectedTab = string.Empty;
bool isValid;
public MyTabbedPage()
{
On<Xamarin.Forms.PlatformConfiguration.Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);
this.CurrentPageChanged += delegate
{
unSelectedTab = selectedTab;
selectedTab = CurrentPage.Title;
if (App.Titles != null)
isValid = true;
else
App.Titles = new List<string>();
if (isValid)
{
MoveTitles(selectedTab);
//Pass 0 index for tab selected & 1 for tab unselected
var unSelecteTabTitle = App.Titles[1];
//TabEvents(1); here you know which tab unseleted call any method
}
};
}
//This method is for to moving selected title on top of App.Titles list & unseleted tab title automatic shifts at index 1
void MoveTitles(string selected)
{
var holdTitles = App.Titles;
if (holdTitles.Count > 0)
{
int indexSel = holdTitles.FindIndex(x => x.StartsWith(selected));
holdTitles.RemoveAt(indexSel);
holdTitles.Insert(0, selected);
}
App.Titles = holdTitles;
}
}
Или вы можете сделать так:
void TabEvents(int index)
{
switch (index)
{
case 0:
//Tab selected
break;
case 1:
//Tab unselected
break;
}
}
Несколько вещей, о которых стоит упомянуть, что MainPage.xaml.cs
файл наследует MyTabbedPage
public partial class MainPage : MyTabbedPage
Структурафайла MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<local:MyTabbedPage
<TabbedPage.Children>
<NavigationPage Title="Browse">
</NavigationPage>
</TabbedPage.Children>
</local:MyTabbedPage>
Ответ кажется длинным, но надеюсь, он вам поможет.