Sdílet prostřednictvím


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í:

Snímek obrazovky s povoleným starším režimem ViewCell v Androidu

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í:

Snímek obrazovky se zakázaným režimem starší verze ViewCell v Androidu

V tomto režimu se zobrazí správné položky místní nabídky akcí pro buňku 1 a buňku 2.