Жест касания сработал для нескольких подвидов внутри ListView - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть ListView:

<ListView
    CachingStrategy="RecycleElement"
    x:Name="ItemList"
    HasUnevenRows="True"
    BackgroundColor="Transparent"
    SeparatorColor="{x:Static local:LmcColor.defaultFg}"
    HorizontalOptions="FillAndExpand"
    VerticalOptions="FillAndExpand"
    IsVisible="False"
    ItemSelected="ItemList_ItemSelected"/>

Его ItemTemplate инициализируется следующим образом:

ItemList.ItemTemplate = new DataTemplate(() =>
    new ViewCell() { View = new ItemReadView() });

И ItemReadView - это ContentView, содержащий StackView, содержащий Image, называемый ItemImage. Я определяю распознаватель жестов для этого Image:

TapGestureRecognizer handler = new TapGestureRecognizer();
handler.Tapped += ((object sender, EventArgs e) =>
{
    // Do stuff!
});
ItemImage.GestureRecognizers.Clear();
ItemImage.GestureRecognizers.Add(handler);

В Xamarin Forms 2.5.1.444934 он работал нормально. Теперь, в 3.3.0.967583, «Делать вещи» вызывается для нескольких видов изображений после одного нажатия. Я не уверен, что проблема присутствовала в формах 3.1.0.637273. Ошибка затрагивает только iOS.

В качестве обходного пути я добавил задержку в 200 мсек, прежде чем «делать вещи», и «вещи» не «делаются», если в этот интервал приходит новое событие. К счастью, «настоящее» событие приходит последним. К сожалению, чем больше я прокручиваю представление списка перед нажатием, тем больше событий происходит, и я боюсь какого-то переполнения ресурса.

Кто-нибудь это заметил? Есть ли "правильные" исправления? Есть что-то, что я могу делать не так? Должен ли я заменить TapGestureRecognizer чем-то другим, и если да, то чем?

Спасибо!

...