Azioni di contesto ViewCell in Android

Download Sample Scaricare l'esempio

Per impostazione predefinita, dalla Xamarin.Forms versione 4.3, quando un in ViewCell un'applicazione Android definisce le azioni di contesto per ogni elemento in un ListView, il menu azioni di scelta rapida viene aggiornato quando l'elemento ListView selezionato nelle modifiche. Tuttavia, nelle versioni precedenti del menu azioni di Xamarin.Forms scelta rapida non è stato aggiornato e questo comportamento viene definito ViewCell modalità legacy. Questa modalità legacy può comportare un comportamento errato se un ListView oggetto usa un DataTemplateSelector oggetto per impostarne ItemTemplate da DataTemplate oggetti che definiscono azioni di contesto diverse.

Questo specifico della piattaforma Android abilita la modalità legacy del ViewCell menu azioni di scelta rapida, per la compatibilità con le versioni precedenti, in modo che il menu azioni di scelta rapida non venga aggiornato quando l'elemento selezionato in una ListView modifica. Viene utilizzata in XAML impostando la ViewCell.IsContextActionsLegacyModeEnabled proprietà associabile su 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>

In alternativa, può essere usato da C# usando l'API Fluent:

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

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

Il ViewCell.On<Android> metodo specifica che questa specifica della piattaforma verrà eseguita solo in Android. Il ViewCell.SetIsContextActionsLegacyModeEnabled metodo , nello Xamarin.Forms.PlatformConfiguration.AndroidSpecific spazio dei nomi , viene usato per abilitare la modalità legacy del ViewCell menu azioni di scelta rapida, in modo che il menu azioni di scelta rapida non venga aggiornato quando l'elemento selezionato in una ListView modifica. Inoltre, il ViewCell.GetIsContextActionsLegacyModeEnabled metodo può essere usato per restituire se la modalità legacy delle azioni di contesto è abilitata.

Gli screenshot seguenti mostrano ViewCell le azioni di contesto abilitate per la modalità legacy:

Screenshot of ViewCell legacy mode enabled, on Android

In questa modalità, le voci di menu di scelta rapida visualizzate sono identiche per la cella 1 e la cella 2, nonostante le diverse voci di menu di scelta rapida definite per la cella 2.

Gli screenshot seguenti mostrano ViewCell le azioni di contesto disabilitate in modalità legacy, ovvero il comportamento predefinito Xamarin.Forms :

Screenshot of ViewCell legacy mode disabled, on Android

In questa modalità vengono visualizzate le voci di menu di scelta rapida corrette per la cella 1 e la cella 2.