Udostępnij za pośrednictwem


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.IsContextActionsLegacyModeEnabledtrue:

<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:

Zrzut ekranu przedstawiający włączony starszy tryb ViewCell w systemie Android

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 :

Zrzut ekranu przedstawiający wyłączony tryb starszej wersji funkcji ViewCell w systemie Android

W tym trybie są wyświetlane poprawne elementy menu akcji kontekstowej dla komórki 1 i komórki 2.