前提・実現したいこと
Xamarinを使用してC#でiOS/Android向けのアプリを開発しております。実現したいのは、XAMLのPickerで入力完了を意味するDone/OKボタンが押された際に、特定の処理を走らせることです。(Pickerの入力完了のボタンはiOSではDoneボタン、AndroidではOKボタンです。)
iOS側で実現することはできたため、今回の質問はAndroid側での実現方法についてです。
iOS側の実装
iOS側の実装については、PickerRendererクラスを継承して実現することができました。XAMLにて以下のBasePickerタグを記述することで、Doneボタン押下にて★印のついたコメント行の処理を呼び出すことができています。
BasePicker.cs
C#
1using Xamarin.Forms; 2 3namespace AppName.Controls 4{ 5 public class BasePicker : Picker 6 { 7 public BasePicker() : base() 8 { 9 } 10 11 string _someProperty = null; 12 public string SomeProperty 13 { 14 get { return _someProperty ; } 15 set { _someProperty = value; } 16 } 17 } 18}
MyPickerRenderer.cs(AppName.iOS側に存在)
C#
1using System; 2using Xamarin.Forms; 3using Xamarin.Forms.Platform.iOS; 4using UIKit; 5using AppName.Controls; 6using AppName.iOS.Renderer; 7 8[assembly: ExportRenderer(typeof(BasePicker), typeof(MyPickerRenderer))] 9namespace AppName.iOS.Renderer 10{ 11 public class MyPickerRenderer : PickerRenderer 12 { 13 protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 14 { 15 base.OnElementChanged(e); 16 17 if (e.OldElement != null) 18 { 19 if (Control != null) 20 { 21 var toolbar = (UIToolbar)Control.InputAccessoryView; 22 var doneBtn = toolbar.Items[1]; 23 24 doneBtn.Clicked -= DoneBtn_Clicked; 25 } 26 } 27 28 if (e.NewElement != null) 29 { 30 var toolbar = (UIToolbar)Control.InputAccessoryView; 31 var doneBtn = toolbar.Items[1]; 32 33 doneBtn.Clicked += DoneBtn_Clicked; 34 } 35 } 36 37 void DoneBtn_Clicked(object sender, EventArgs e) 38 { 39 // ★ここに何か実行したい処理を書く★ 40 } 41 } 42}
Android側の実装(試したこと)
今回質問したいのは、Android側の実装をどうすべきかというという点です。最初に、AppName.iOS側に存在するMyPickerRenderer.csをAppName.Android側にコピーし、usingやnamespaceの「iOS」の部分を「Android」等に書き換えました。
次に、元々のiOS向けのコードにはUIToolbarを取得したのち、(UIBarButtonItem)doneBtnを取得している部分がありますので、この部分をAndroid向けに書き換える必要があると考えています。しかしこのdoneBtnの取得方法について、さまざまなキーワードで検索を試みましたが、情報を見つけることができませんでした。ここで調査が行き詰っています。
Visual Studioの入力補完機能を使用すると、OnElementChanged内で得られるControlにはSetOn○○○Listenerというメソッドが複数存在しているようで、これを利用すればOKボタンを押した際に呼び出されるメソッドを指定できるのかもしれないとも推測しています。しかしこれについても、検索を試みても詳しい使用方法がヒットせず、単なる推測のままです。
Android側でPickerのOKボタンが押された際に特定の処理を呼び出すにはどうすればいいのでしょうか。どうぞよろしくお願いいたします。
その他の試したこと
XAMLのPickerで指定できるSelectedIndexChangedについては、選択項目を変更せずにDone/OKした場合に動作してくれないため、今回の使用目的には合いませんでした。同様にPropertyChanged、Unfocusedについても今回の使用目的には合いませんでした。
補足情報(FW/ツールのバージョンなど)
C#、Xamarin.Forms等のバージョンは最新のものを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/09 06:18
2021/12/09 15:59
2021/12/14 03:06