다음을 통해 공유


Android의 ViewCell 컨텍스트 작업

기본적으로 4.3부터 Xamarin.Forms Android 애플리케이션에서 각 항목ListView에 대한 컨텍스트 동작을 정의하는 경우 ViewCell 상황에 맞는 작업 메뉴는 변경 내용에서 ListView 선택한 항목이 변경될 때 업데이트됩니다. 그러나 이전 버전의 Xamarin.Forms 상황에 맞는 작업 메뉴는 업데이트되지 않았으며 이 동작을 레거시 모드라고 ViewCell 합니다. 이 레거시 모드는 다른 컨텍스트 동작을 ListView 정의하는 개체에서 DataTemplate 설정하는 ItemTemplate 데 사용하는 DataTemplateSelector 경우 잘못된 동작이 발생할 수 있습니다.

이 Android 플랫폼별 기능을 사용하면 이전 버전과의 호환성을 위해 상황에 맞는 작업 메뉴 레거시 모드를 사용할 수 ViewCell 있으므로 선택한 항목 ListView 이 변경될 때 상황에 맞는 작업 메뉴가 업데이트되지 않습니다. 바인딩 가능한 속성을 true다음으로 설정하여 XAML에서 ViewCell.IsContextActionsLegacyModeEnabled 사용합니다.

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

또는 흐름 API를 사용하여 C#에서 사용할 수 있습니다.

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

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

이 메서드는 ViewCell.On<Android> 이 플랫폼별이 Android에서만 실행되도록 지정합니다. ViewCell.SetIsContextActionsLegacyModeEnabled 네임스페이스의 메서드 Xamarin.Forms.PlatformConfiguration.AndroidSpecific 는 상황에 맞는 작업 메뉴 레거시 모드를 사용하도록 설정하는 ViewCell 데 사용되므로 선택한 항목 ListView 이 변경될 때 상황에 맞는 작업 메뉴가 업데이트되지 않습니다. 또한 이 메서드를 ViewCell.GetIsContextActionsLegacyModeEnabled 사용하여 컨텍스트 작업 레거시 모드가 사용되는지 여부를 반환할 수 있습니다.

다음 스크린샷은 컨텍스트 작업 레거시 모드를 사용하도록 설정된 것을 보여 ViewCell 줍니다.

Android에서 사용하도록 설정된 ViewCell 레거시 모드의 스크린샷

이 모드에서는 셀 2에 대해 다른 상황에 맞는 메뉴 항목이 정의되어 있음에도 불구하고 표시된 상황에 맞는 작업 메뉴 항목은 셀 1과 셀 2에 대해 동일합니다.

다음 스크린샷은 기본 동작인 컨텍스트 작업 레거시 모드를 사용하지 않도록 설정됨을 Xamarin.Forms 보여 ViewCell 줍니다.

Android에서 사용할 수 없는 ViewCell 레거시 모드의 스크린샷

이 모드에서는 셀 1과 셀 2에 대해 올바른 상황에 맞는 작업 메뉴 항목이 표시됩니다.