Android での ViewCell コンテキスト アクション
Xamarin.Forms 4.3 から既定として、Android アプリケーション内の ViewCell
が ListView
内の各項目のコンテキスト アクションを定義している場合、コンテキスト アクション メニューは、ListView
内の選択された項目が変化したときに更新されます。 しかし、Xamarin.Forms の以前のバージョンでは、コンテキスト アクション メニューは更新されず、この動作は ViewCell
レガシ モードと呼ばれます。 ListView
がさまざまなコンテキスト アクションを定義する DataTemplate
オブジェクトから自身の ItemTemplate
を設定するために DataTemplateSelector
を使用する場合、このレガシ モードは正しくない動作を引き起こす可能性があります。
この Android プラットフォーム固有設定では、後方互換対応のために ViewCell
コンテキスト アクション メニューのレガシ モードを有効にして、ListView
内の選択された項目が変化したときにコンテキスト アクション メニューが更新されないようにできます。 この機能を XAML で使用するには、バインド可能なプロパティ ViewCell.IsContextActionsLegacyModeEnabled
を 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>
あるいは、Fluent API を使用して C# から使用することもできます。
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
ViewCell.On<Android>
メソッドは、このプラットフォーム固有設定が Android 上でのみ実行されるように指定します。 Xamarin.Forms.PlatformConfiguration.AndroidSpecific
名前空間内の ViewCell.SetIsContextActionsLegacyModeEnabled
メソッドは、ListView
内の選択された項目が変化したときにコンテキスト アクション メニューが更新されないようにするために、ViewCell
コンテキスト アクション メニューのレガシ モードを有効にするために使用されます。 さらに、ViewCell.GetIsContextActionsLegacyModeEnabled
メソッドを使用して、コンテキスト アクションのレガシ モードが有効になっているかどうかを返すことができます。
次のスクリーンショットは、ViewCell
コンテキスト アクションのレガシ モードが有効になっていることを示しています。
このモードでは、セル 2 に対しては異なるコンテキスト メニュー項目が定義されているにもかかわらず、表示されるコンテキスト アクション メニュー項目はセル 1 とセル 2 で同じです。
次のスクリーンショットは、ViewCell
コンテキスト アクションのレガシ モードが無効になっていることを示しています。これは Xamarin.Forms の既定の動作です。
このモードでは、セル 1 とセル 2 に対して適切なコンテキスト アクション メニュー項目が表示されます。