【问题标题】:Xamarin Forms Listview ItemSelected NavigationPage Two TimesXamarin Forms Listview ItemSelected NavigationPage 两次
【发布时间】:2019-01-24 20:50:45
【问题描述】:

我有一个列表视图,当单击列表项时,我想打开项目详细信息页面。但是当我不止一键快速打开两个导航页面时。我的详细信息页面的 const 有一个异步方法。 这是我的代码。

如何阻止多次点击?

MyPage.xaml

    <ListView      
    HasUnevenRows="True"
    SeparatorColor="#e7e5e5"
    IsPullToRefreshEnabled="True"      
    ItemsSource="{Binding ExpecterDemands}"
    IsRefreshing="{Binding IsBusy, Mode=OneWay}"
    ItemSelected="InfiniteListView_ItemSelected">

MyPage.xaml.cs

async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
    {         
        await Navigation.PushAsync(new DetailPage());
    }

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    更好的解决方案是使用ItemTapped 而不是ItemSelected

    ItemSelected 会触发多次。

    另一方面,ItemTapped 仅在点击该项目时触发一次。

    【讨论】:

      【解决方案2】:

      如果你想防止双击,你可以添加一个本地布尔值来防止它运行多次,只要确保它在 finally 语句中被设置回 false。

      bool _isRunning;
      
      async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e
      {
          if (_isRunning)
              return;
      
          _isRunning = true;
      
          try
          {
              await Navigation.PushAsync(new DetailPage());
          }
          finally
          {
              _isRunning = false;
          }
      }
      

      【讨论】:

        【解决方案3】:

        就我而言,我不能使用ItemSelected,我为ItemTapped 修复了这样的问题 创建一个通用方法StopMultipleTaps,它将禁用ListView 500 ms,这样就不会捕获另一个快速点击。

        public void StopMultipleTaps(ListView listView)
            {
                listView.IsEnabled = false;
                Device.StartTimer(TimeSpan.FromMilliseconds(500), () => {
                    listView.IsEnabled = true;
                    return false;
                });
            }
        

        在 ItemTapped 处理程序的最开始调用上述方法:

            async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
            { 
                StopMultipleTaps((ListView)sender);       
                await Navigation.PushAsync(new DetailPage());
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-09
          • 2018-03-10
          • 1970-01-01
          • 2017-04-17
          • 1970-01-01
          • 1970-01-01
          • 2017-01-05
          • 1970-01-01
          相关资源
          最近更新 更多