Akcje kontekstu ViewCell w systemie Android
Domyślnie z Xamarin.Forms wersji 4.3, gdy element ViewCell
w aplikacji systemu Android definiuje akcje kontekstowe dla każdego elementu w elemencie ListView
, menu akcji kontekstowych jest aktualizowane po wybraniu ListView
elementu w zmianach. Jednak w poprzednich Xamarin.Forms wersjach menu akcji kontekstowych nie został zaktualizowany, a to zachowanie jest określane jako ViewCell
starszy tryb. Ten starszy tryb może spowodować nieprawidłowe zachowanie, jeśli ListView
obiekt używa DataTemplateSelector
klasy do ustawiania jej ItemTemplate
z DataTemplate
obiektów definiujących różne akcje kontekstowe.
Ta platforma systemu Android umożliwia korzystanie ze starszego ViewCell
trybu menu akcji kontekstowych w celu zapewnienia zgodności z poprzednimi wersjami, dzięki czemu menu akcji kontekstowych nie jest aktualizowane po wprowadzeniu zmian przez wybrany element ListView
. Jest on używany w języku XAML przez ustawienie właściwości możliwej do powiązania z wartością ViewCell.IsContextActionsLegacyModeEnabled
true
:
<ContentPage ...
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core">
<StackLayout Margin="20">
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell android:ViewCell.IsContextActionsLegacyModeEnabled="true">
<ViewCell.ContextActions>
<MenuItem Text="{Binding Item1Text}" />
<MenuItem Text="{Binding Item2Text}" />
</ViewCell.ContextActions>
<Label Text="{Binding Text}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
Alternatywnie można go używać z poziomu języka C# przy użyciu płynnego interfejsu API:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
Metoda ViewCell.On<Android>
określa, że ta platforma będzie działać tylko w systemie Android. Metoda ViewCell.SetIsContextActionsLegacyModeEnabled
w Xamarin.Forms.PlatformConfiguration.AndroidSpecific
przestrzeni nazw służy do włączania trybu starszego ViewCell
menu akcji kontekstowych, dzięki czemu menu akcji kontekstowych nie jest aktualizowane po zmianie wybranego elementu ListView
. Ponadto można użyć metody w celu zwrócenia, ViewCell.GetIsContextActionsLegacyModeEnabled
czy jest włączony tryb starszej wersji akcji kontekstu.
Na poniższych zrzutach ekranu przedstawiono ViewCell
włączone akcje kontekstowe w starszym trybie:
W tym trybie wyświetlane elementy menu akcji kontekstowej są identyczne dla komórki 1 i komórki 2, pomimo różnych elementów menu kontekstowego zdefiniowanych dla komórki 2.
Na poniższych zrzutach ekranu przedstawiono ViewCell
wyłączone akcje kontekstowe w trybie starszym, co jest zachowaniem domyślnym Xamarin.Forms :
W tym trybie są wyświetlane poprawne elementy menu akcji kontekstowej dla komórki 1 i komórki 2.