Xamarin: есть ли способ провести различие между пролистыванием и щелчком BottomNavigationView? - PullRequest
1 голос
/ 16 апреля 2019

Мне интересно, можно ли провести различие между пролистыванием и щелчком на BottomNavigationView в Xamarin.Android.

Я реализовал:

    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, но это совершенно другой элемент пользовательского интерфейса:

https://github.com/hexag0d/BitChute_Mobile_Android_a2/blob/2.7641/Activities/ClickListeners.cs

Если вы хотите больше контекста для всего проекта, вот MainActivity.Тогда вы можете вернуться к остальным:

https://github.com/hexag0d/BitChute_Mobile_Android_BottomNav/blob/master/MainActivity.cs

Спасибо, заранее

1 Ответ

0 голосов
/ 28 апреля 2019

Ответ на этот вопрос - да.Метод ViewPager_PageSelected вызывается, когда пользователь проводит пальцем.NavigationView_NavigationItemSelected вызывается при нажатии на вкладку.Интересно, что если метод ViewPager_PageSelected помещен перед NavigationView_NavigationItemSelected, ViewPager_PageSelected не будет вызываться, когда пользователь нажимает вкладку до тех пор, пока этот метод не будет вызван:

_viewPager.SetCurrentItem(e.Item.Order, true);

После того, как это произойдет,метод ViewPager_PageSelected вызывается, и NavigationView_NavigationItemSelected вызывается снова .Поэтому я решил сделать заказ, как это и установить кастомное int.Таким образом, оба метода вызываются только один раз для каждого взаимодействия с пользователем, и существует различие.

(события Note 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...