c# - Xamarin:有没有办法区分滑动和底部导航视图点击?
问题描述
我想知道是否可以区分 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
提前致谢
解决方案
这个问题的答案是肯定的。用户滑动时调用 ViewPager_PageSelected 方法。NavigationView_NavigationItemSelected 在标签按下时调用。有趣的是,如果将 ViewPager_PageSelected 方法放在NavigationView_NavigationItemSelected 方法之前,则在用户按下选项卡时不会调用 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;
}
推荐阅读
- python - 过滤 NumPy 数组
- javascript - 当另一个图像触摸它时如何使图像消失?html/js
- github - 使用 Azure DevOps 构建公共 GitHub 存储库
- javascript - Vue draggable 切换时不会更新文本输入字段,但会在数组中更新
- c# - 从 Windows 上的 C# Service Fabric 应用程序连接到 docker_engine(命名管道)
- reactjs - d3 元素未在 React 中呈现
- reactjs - 如何正确管理 JSX.Elements 列表的反应状态
- java - 是否可以将多个pdf页面合并到一张pdf并在java中打印?
- java - 找不到@SpringBootConfiguration
- keras - 在 Keras 中连接层