Partager via


Actions contextuelles de ViewCell sur Android

Par défaut, à partir de Xamarin.Forms la version 4.3, lorsqu’une ViewCell application Android définit des actions contextuelles pour chaque élément d’un ListView, le menu Actions contextuelles est mis à jour lorsque l’élément sélectionné dans les ListView modifications. Toutefois, dans les versions précédentes du Xamarin.Forms menu Actions contextuelles n’a pas été mis à jour, et ce comportement est appelé mode ViewCell hérité. Ce mode hérité peut entraîner un comportement incorrect si une ListView utilisation permet DataTemplateSelector de DataTemplate définir ses ItemTemplate objets qui définissent différentes actions de contexte.

Cette plateforme Android spécifique permet le ViewCell mode hérité du menu Actions contextuelles, pour la compatibilité descendante, afin que le menu actions contextuelles ne soit pas mis à jour lorsque l’élément sélectionné dans une ListView modification. Elle est consommée en XAML en définissant la ViewCell.IsContextActionsLegacyModeEnabled propriété pouvant être liée sur 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>

Elle peut également être consommée à partir de C# à l’aide de l’API Fluent :

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

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

La ViewCell.On<Android> méthode spécifie que cette plateforme spécifique ne s’exécutera que sur Android. La ViewCell.SetIsContextActionsLegacyModeEnabled méthode, dans l’espace Xamarin.Forms.PlatformConfiguration.AndroidSpecific de noms, est utilisée pour activer le ViewCell mode hérité du menu Actions contextuelles afin que le menu actions contextuelles ne soit pas mis à jour lorsque l’élément sélectionné dans une ListView modification. En outre, la ViewCell.GetIsContextActionsLegacyModeEnabled méthode peut être utilisée pour retourner si le mode hérité des actions de contexte est activé.

Les captures d’écran suivantes montrent ViewCell les actions contextuelles en mode hérité activé :

Capture d’écran du mode hérité ViewCell activé sur Android

Dans ce mode, les éléments de menu d’action contextuelle affichés sont identiques pour la cellule 1 et la cellule 2, malgré les différents éléments de menu contextuel définis pour la cellule 2.

Les captures d’écran suivantes montrent ViewCell les actions contextuelles en mode hérité désactivé, qui est le comportement par défaut Xamarin.Forms :

Capture d’écran du mode hérité ViewCell désactivé, sur Android

Dans ce mode, les éléments de menu d’action contextuelle appropriés sont affichés pour la cellule 1 et la cellule 2.