Azioni di contesto ViewCell in Android
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:
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 :
In questa modalità vengono visualizzate le voci di menu di scelta rapida corrette per la cella 1 e la cella 2.