Compartilhar via


Ações de contexto ViewCell no Android

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

Esse específico da plataforma Android habilita o modo herdado do ViewCell menu de ações de contexto, para compatibilidade com versões anteriores, para 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 associável 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 esse específico da plataforma só será executado 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 o modo herdado de ações de contexto habilitado:

Captura de tela do modo legado do 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 itens de menu de contexto diferentes serem definidos para a célula 2.

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

Captura de tela do modo legado do 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.