Xamarin表单列表视图项选定导航页面两次
我有一个列表视图,当单击列表项时,我想打开项目详细信息页面。但当我不止一次快速点击时,它就会打开两个导航页面。我的详细信息页面的常量有一个异步方法。 这是我的密码 如何阻止多次单击 MyPage.xamlXamarin表单列表视图项选定导航页面两次,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个列表视图,当单击列表项时,我想打开项目详细信息页面。但当我不止一次快速点击时,它就会打开两个导航页面。我的详细信息页面的常量有一个异步方法。 这是我的密码 如何阻止多次单击 MyPage.xaml <ListView HasUnevenRows="True" SeparatorColor="#e7e5e5" IsPullToRefreshEnabled="True" ItemsSource="{Binding Expe
<ListView
HasUnevenRows="True"
SeparatorColor="#e7e5e5"
IsPullToRefreshEnabled="True"
ItemsSource="{Binding ExpecterDemands}"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
ItemSelected="InfiniteListView_ItemSelected">
如果要防止双击,可以添加一个本地bool来防止它多次运行,只需确保在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;
}
}
更好的解决方案是使用
itemstapped
而不是ItemSelected
ItemSelected
将多次触发
另一方面,
itemstapped
,在点击项目时只触发一次。在我的情况下,我不能使用ItemSelected
,我这样修复了itemstapped
创建一个通用方法StopMultipleTaps
,该方法将禁用ListView 500毫秒,以便不会捕获另一个快速单击
public void StopMultipleTaps(ListView listView)
{
listView.IsEnabled = false;
Device.StartTimer(TimeSpan.FromMilliseconds(500), () => {
listView.IsEnabled = true;
return false;
});
}
在ItemHandler的最开始调用上述方法:
async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
{
StopMultipleTaps((ListView)sender);
await Navigation.PushAsync(new DetailPage());
}
async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
{
StopMultipleTaps((ListView)sender);
await Navigation.PushAsync(new DetailPage());
}