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