当 select 个项目时,xamarin Forms ListView Item Tapped 和 Item Selected 一起 运行
xamarinForms ListView ItemTapped and ItemSelected is running together when select an item
我有一个包含两个事件 "ItemTapped" 和 "ItemSelected" 的 ListView,当用户 select 该项目应该出现警报 "You selected item" 时,当用户点击应该出现一个警报 "You tapped item" 项目。
但是发生的事情是当用户 select 一个项目时,首先出现 "You tapped item" 的警报然后出现 "You selected item" 的警报为什么会这样???
这是我的 Xaml 文件
<ListView x:Name="listView"
ItemTapped="Tapped"
ItemSelected="Select">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" Detail="{Binding Status}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码隐藏
void Select(object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
{
var contact = e.SelectedItem as Contact;
DisplayAlert("selected", "You selected item", "Ok");
// listView.SelectedItem = null;
}
void Tapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
{
var contact = e.Item as Contact;
DisplayAlert("tapped", "You tapped item", "Ok");
}
当您 点击 一个项目时会触发 ItemTapped
事件。
当您selected 一个项目时,ItemSelected
事件被触发。当您点击当前未 select 的项目时,您 select 一个项目。
在这种情况下,如果您点击的项目不是 selected,ItemTapped
和 ItemSelected
事件都会被触发。
一种解决方法可以管理这两个事件,例如,
您可以在双击列表项时调用 Listview ItemTapped 事件。
& 默认Listview Single Tap可以获得ItemSelected Event.
注意:这只是同时管理两者的解决方法。
另一个简单的解决方法是计算触发 Tapped 事件的次数。正如我所意识到的,Tapped 事件总是在 Selected 事件之前触发,因此只需定义一个整数,在每个 Tapped 事件中增加它,并在 Selected 事件中重置。
private int _myListTapNumber = 0;
...
private void MyList_ItemTapped(object sender, ItemTappedEventArgs e)
{
if (_myListTapNumber > 1)
{
DisplayAlert("Tapped", "Tap event fired.", "OK");
}
_myListTapNumber++;
}
private void MyList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
_myListTapNumber = 1;
DisplayAlert("Selected", "Selected event fired.", "OK");
}
private bool selectionFixed = false;
void Select(object sender, SelectedItemChangedEventArgs e)
{
selectionFixed = false;
}
void Tapped(object sender, ItemTappedEventArgs e)
{
if (selectionFixed)
DisplayAlert("Choice", "Your Choice: " + e.Item, "Ok");
else
selectionFixed = true;
}
我有一个包含两个事件 "ItemTapped" 和 "ItemSelected" 的 ListView,当用户 select 该项目应该出现警报 "You selected item" 时,当用户点击应该出现一个警报 "You tapped item" 项目。 但是发生的事情是当用户 select 一个项目时,首先出现 "You tapped item" 的警报然后出现 "You selected item" 的警报为什么会这样???
这是我的 Xaml 文件
<ListView x:Name="listView"
ItemTapped="Tapped"
ItemSelected="Select">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" Detail="{Binding Status}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码隐藏
void Select(object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
{
var contact = e.SelectedItem as Contact;
DisplayAlert("selected", "You selected item", "Ok");
// listView.SelectedItem = null;
}
void Tapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
{
var contact = e.Item as Contact;
DisplayAlert("tapped", "You tapped item", "Ok");
}
当您 点击 一个项目时会触发 ItemTapped
事件。
当您selected 一个项目时,ItemSelected
事件被触发。当您点击当前未 select 的项目时,您 select 一个项目。
在这种情况下,如果您点击的项目不是 selected,ItemTapped
和 ItemSelected
事件都会被触发。
一种解决方法可以管理这两个事件,例如, 您可以在双击列表项时调用 Listview ItemTapped 事件。 & 默认Listview Single Tap可以获得ItemSelected Event.
注意:这只是同时管理两者的解决方法。
另一个简单的解决方法是计算触发 Tapped 事件的次数。正如我所意识到的,Tapped 事件总是在 Selected 事件之前触发,因此只需定义一个整数,在每个 Tapped 事件中增加它,并在 Selected 事件中重置。
private int _myListTapNumber = 0;
...
private void MyList_ItemTapped(object sender, ItemTappedEventArgs e)
{
if (_myListTapNumber > 1)
{
DisplayAlert("Tapped", "Tap event fired.", "OK");
}
_myListTapNumber++;
}
private void MyList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
_myListTapNumber = 1;
DisplayAlert("Selected", "Selected event fired.", "OK");
}
private bool selectionFixed = false;
void Select(object sender, SelectedItemChangedEventArgs e)
{
selectionFixed = false;
}
void Tapped(object sender, ItemTappedEventArgs e)
{
if (selectionFixed)
DisplayAlert("Choice", "Your Choice: " + e.Item, "Ok");
else
selectionFixed = true;
}