Akce kontextu ViewCell v Androidu
Ve výchozím nastavení od Xamarin.Forms verze 4.3, když ViewCell
aplikace pro Android definuje kontextové akce pro každou položku v objektu ListView
, místní nabídka akcí se aktualizuje, když se vybraná položka ve změnách ListView
změní. V předchozích verzích Xamarin.Forms místní nabídky akcí se však neaktualizovalo a toto chování se označuje jako ViewCell
starší režim. Tento starší režim může vést k nesprávnému chování, pokud ListView
použije DataTemplateSelector
k nastavení objekty DataTemplate
ItemTemplate
, které definují různé kontextové akce.
Tato platforma pro Android umožňuje ViewCell
režim starší verze nabídky kontextových akcí kvůli zpětné kompatibilitě, aby se místní nabídka akcí při změně vybrané položky ListView
neaktualizovala. Využívá se v XAML nastavením vlastnosti bindable na 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>
Alternativně ho můžete využívat z jazyka C# pomocí rozhraní FLUENT API:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
Metoda ViewCell.On<Android>
určuje, že tato konkrétní platforma se bude spouštět pouze v Androidu. Metoda ViewCell.SetIsContextActionsLegacyModeEnabled
v Xamarin.Forms.PlatformConfiguration.AndroidSpecific
oboru názvů se používá k povolení ViewCell
režimu nabídky kontextových akcí starší verze, aby se místní nabídka akcí neaktualizovala, když se vybraná položka ve změnách ListView
změní. Kromě toho lze metodu ViewCell.GetIsContextActionsLegacyModeEnabled
použít k vrácení, zda je povolen režim starší verze kontextových akcí.
Následující snímky obrazovky ukazují ViewCell
, že je povolený režim starší verze kontextových akcí:
V tomto režimu jsou zobrazené položky místní nabídky akcí stejné pro buňku 1 a buňku 2, i když jsou pro buňku 2 definovány různé položky místní nabídky.
Následující snímky obrazovky ukazují ViewCell
, že režim starší verze kontextových akcí je zakázaný, což je výchozí Xamarin.Forms chování:
V tomto režimu se zobrazí správné položky místní nabídky akcí pro buňku 1 a buňku 2.