Aracılığıyla paylaş


Android'de ViewCell Bağlam Eylemleri

Varsayılan olarak 4.3'ten itibaren Xamarin.Forms , bir Android uygulamasındaki bir ViewCell içindeki her öğe ListViewiçin bağlam eylemleri tanımladığında, seçilen öğe değiştiğinde ListView bağlam eylemleri menüsü güncelleştirilir. Ancak, bağlam eylemleri menüsünün Xamarin.Forms önceki sürümlerinde güncelleştirilmemiş ve bu davranış eski mod olarak ViewCell adlandırılır. Bu eski mod, farklı bağlam eylemlerini ItemTemplate tanımlayan nesnelerden DataTemplate ayarlamak için bir ListView DataTemplateSelector kullanırsa yanlış davranışa neden olabilir.

Bu Android platformuna ViewCell özgü, geriye dönük uyumluluk için bağlam eylemleri menüsü eski modunu etkinleştirir, böylece bağlam eylemleri menüsü bir ListView değişiklikte seçili öğe değiştiğinde güncelleştirilmez. XAML'de bindable özelliği trueolarak ayarlanarak ViewCell.IsContextActionsLegacyModeEnabled kullanılır:

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

Alternatif olarak, akıcı API kullanılarak C# dilinden de kullanılabilir:

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

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

yöntemi, ViewCell.On<Android> platforma özgü bu uygulamanın yalnızca Android'de çalışacağını belirtir. ViewCell.SetIsContextActionsLegacyModeEnabled ad alanında Xamarin.Forms.PlatformConfiguration.AndroidSpecific yöntemi, bağlam eylemleri menüsünün eski modunu etkinleştirmek ViewCell için kullanılır, böylece bağlam eylemleri menüsü, ListView seçilen öğe değiştiğinde güncelleştirilmez. Ayrıca, ViewCell.GetIsContextActionsLegacyModeEnabled bağlam eylemleri eski modunun etkinleştirilip etkinleştirilmediğini döndürmek için yöntemi kullanılabilir.

Aşağıdaki ekran görüntüleri, bağlam eylemleri eski modunun etkin olduğunu gösterir ViewCell :

Android'de ViewCell eski modunun etkin olduğu ekran görüntüsü

Bu modda, görüntülenen bağlam eylemi menü öğeleri, 2. hücre için farklı bağlam menüsü öğelerinin tanımlanmasına rağmen 1. ve 2. hücre için aynıdır.

Aşağıdaki ekran görüntüleri, varsayılan Xamarin.Forms davranış olan bağlam eylemleri eski modunun devre dışı bırakıldığı gösterirViewCell:

Android'de ViewCell eski modunun devre dışı bırakılmıştır ekran görüntüsü

Bu modda, 1. ve 2. hücre için doğru bağlam eylemi menü öğeleri görüntülenir.