Compartilhar via


Ações de contexto ViewCell no Android

Por padrão, a partir da versão 4.3, quando um ViewCell aplicativo Android define ações de contexto para cada item em um ListView, o menu de ações de Xamarin.Forms contexto é atualizado quando o item selecionado é ListView alterado. No entanto, em versões anteriores do menu de ações de Xamarin.Forms contexto não foi atualizado e esse comportamento é conhecido como o ViewCell modo herdado. Esse modo herdado pode resultar em comportamento incorreto se um ListView usa a DataTemplateSelector para definir seu ItemTemplate a partir de objetos que definem ações de DataTemplate contexto diferentes.

Este específico da plataforma Android habilita o modo herdado do ViewCell menu de ações de contexto, para compatibilidade com versões anteriores, de modo que o menu de ações de contexto não seja atualizado quando o item selecionado em um ListView for alterado. Ele é consumido em XAML definindo a ViewCell.IsContextActionsLegacyModeEnabled propriedade bindable como 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>

Como alternativa, ele pode ser consumido do C# usando a API fluente:

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

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

O ViewCell.On<Android> método especifica que essa plataforma específica só será executada no Android. O ViewCell.SetIsContextActionsLegacyModeEnabled método, no Xamarin.Forms.PlatformConfiguration.AndroidSpecific namespace, é usado para habilitar o modo herdado do ViewCell menu de ações de contexto, de modo que o menu de ações de contexto não seja atualizado quando o item selecionado em um ListView for alterado. Além disso, o ViewCell.GetIsContextActionsLegacyModeEnabled método pode ser usado para retornar se o modo herdado de ações de contexto está habilitado.

As capturas de tela a seguir mostram ViewCell ações de contexto no modo herdado habilitado:

Captura de tela do modo herdado ViewCell ativado, no Android

Nesse modo, os itens de menu de ação de contexto exibidos são idênticos para a célula 1 e a célula 2, apesar de diferentes itens de menu de contexto serem definidos para a célula 2.

As capturas de tela a seguir mostram ViewCell ações de contexto no modo herdado desabilitado, que é o comportamento padrão Xamarin.Forms :

Captura de tela do modo herdado ViewCell desativado, no Android

Nesse modo, os itens de menu de ação de contexto corretos são exibidos para a célula 1 e a célula 2.