Контекстные действия ViewCell в Android

Download Sample Скачайте пример

По умолчанию от Xamarin.Forms 4.3, когда ViewCell приложение Android определяет контекстные действия для каждого элемента в a ListView, контекстное меню действий обновляется при изменении выбранного ListView элемента. Однако в предыдущих версиях контекстного Xamarin.Forms меню действий не было обновлено, и это поведение называется устаревшим режимом ViewCell . Этот устаревший режим может привести к неправильному поведению, если DataTemplateSelectorListView используется для задания из ItemTemplateDataTemplate объектов, определяющих различные действия контекста.

Эта платформа Android включает ViewCell устаревший режим меню контекстных действий для обратной совместимости, чтобы контекстное меню действий не обновлялось при изменении выбранного ListView элемента. Он используется в XAML, задав 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>

Кроме того, его можно использовать из C# с помощью api fluent:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...

viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);

Метод ViewCell.On<Android> указывает, что эта платформа будет работать только в Android. Метод ViewCell.SetIsContextActionsLegacyModeEnabled в Xamarin.Forms.PlatformConfiguration.AndroidSpecific пространстве имен используется для включения ViewCell устаревшего режима контекстного меню действий, чтобы меню контекстных действий не обновлялось при изменении выбранного ListView элемента. Кроме того, этот метод можно использовать для возврата того, ViewCell.GetIsContextActionsLegacyModeEnabled включен ли устаревший режим действий контекста.

На следующих снимках экрана показан ViewCell режим устаревших действий контекста:

Screenshot of ViewCell legacy mode enabled, on Android

В этом режиме отображаемые элементы контекстного меню меню идентичны для ячейки 1 и ячейки 2, несмотря на различные элементы контекстного меню, определенные для ячейки 2.

На следующих снимках экрана показаны ViewCell устаревшие режимы контекстных действий, которые являются поведением по умолчанию Xamarin.Forms :

Screenshot of ViewCell legacy mode disabled, on Android

В этом режиме отображаются правильные пункты меню контекстного действия для ячейки 1 и ячейки 2.