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