Xamarin:有没有办法区分滑动和底部导航视图点击?

问题描述 投票:1回答:1

我想知道是否可以区分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

提前致谢

c# xamarin.android bottomnavigationview
1个回答
0
投票

这个问题的答案是肯定的。用户滑动时调用ViewPager_PageSelected方法。在选项卡上调用NavigationView_NavigationItemSelected。有趣的是,如果在NavigationView_NavigationItemSelected方法之前放置ViewPager_PageSelected方法,则在用户按下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;
}
© www.soinside.com 2019 - 2024. All rights reserved.