我想知道是否可以区分Xamarin.Android中的滑动和单击BottomNavigationView。
我已经实现:
void NavigationView_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
if (_viewPager.CurrentItem == 0)
{
_fm1.Pop2Root();
}
_viewPager.SetCurrentItem(e.Item.Order, true);
}
,但在滑动和点击之间没有区别。如果用户滑动,我想保持当前页面的加载状态,但是如果用户单击了当前选定的BottomNavigationView选项卡,则弹出到根目录。
这是我的Pop2Root方法的样子(并不是很重要):
public void Pop2Root()
{
_wv.LoadUrl("https://www.bitchute.com/");
}
我只想单击和滑动一个单独的事件。
我不是在找任何人做我的工作。一旦确定,我将像往常一样发布完整的解决方案。我正在寻找的答案是是或否。那我就好好处理我之前在TabHost上实现了点击监听器,但这是一个完全不同的UI元素:
https://github.com/hexag0d/BitChute_Mobile_Android_a2/blob/2.7641/Activities/ClickListeners.cs
如果您想了解整个项目的更多背景信息,请访问MainActivity.cs,然后回到其余内容:
https://github.com/hexag0d/BitChute_Mobile_Android_BottomNav/blob/master/MainActivity.cs
预先感谢
答案 0 :(得分:0)
这个问题的答案是肯定的。用户滑动时将调用ViewPager_PageSelected方法。在按下Tab键时会调用NavigationView_NavigationItemSelected。有趣的是,如果将ViewPager_PageSelected方法放在之前 NavigationView_NavigationItemSelected方法中,则当用户按下a选项卡时,直到调用此方法之后,才会调用ViewPager_PageSelected:
_viewPager.SetCurrentItem(e.Item.Order, true);
之后,将调用ViewPager_PageSelected方法,并再次 调用NavigationView_NavigationItemSelected。因此,我决定执行这样的命令并设置一个自定义int。这样,这两种方法在每次用户交互时都只会调用一次,并且存在区别。
(注意事件BottomNavigationView.NavigationItemSelectedEventArgs和ViewPager.PageSelectedEventArgs)
//put all of this inside your MainActivity.cs
int _tabSelected;
void NavigationView_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
if (_tabSelected == e.Item.Order)
{
switch (_viewPager.CurrentItem)
{
case 0:
_fm1.Pop2Root();
break;
case 1:
_fm2.Pop2Root();
break;
case 2:
_fm3.Pop2Root();
break;
case 3:
_fm4.Pop2Root();
break;
case 4:
_fm5.Pop2Root();
break;
}
}
else
{
_viewPager.SetCurrentItem(e.Item.Order, true);
}
}
private void ViewPager_PageSelected(object sender, ViewPager.PageSelectedEventArgs e)
{
_menu = _navigationView.Menu.GetItem(e.Position);
_navigationView.SelectedItemId = _menu.ItemId;
_tabSelected = _viewPager.CurrentItem;
}