またもやお世話になります。Androidアプリ開発の初心者です。
Microsoft Learn等のサイトを参考に、見様見真似で販売管理ツールを組んでいます。
単にダイアログ画面を表示させ、ユーザーが情報を入力したらそれを閉じたい、というだけの処理が上手くいかず、半ベソかいています。
要するに適切なプログラミング入門書も無く、4時間ほどネット上を探し回るも情報が見当たりません。
恐れ入りますが、どなたかやり方を教えて下さい。
■やりたいこと
例えば条件入力等のダイアログ画面を、Activity側から開いたり閉じたりしたい。
ユーザーが「条件入力」ボタンを押せば、Activity側でメソッドを叩いて「条件入力用のダイアログ」画面を開く。
逆にダイアログ画面側の「実行」ボタンが押されれば、Activity側でメソッドを叩いてダイアログ画面を閉じたい(たったそれだけ)
■開発環境等
Xamarin.Androidプロジェクト
最小Android 9.0(API28) ~ ターゲットAndroid 11.0(API30)
Win11 Pro + Visual Studio 2019(開発環境)
■試してみたこと
Microsoft Learn含む幾つかのサイトを参照し、Dialog Fragmentを使用したダイアログ画面作成を実装……しようとしたら、「旧形式だ」とVisual Studioに警告される。
調べてみると、なるほど何世代か前(Android.App)のやり方だと判明。
なので新たな(代替)やり方を探すも、Web上に見当たらず。
結局、AlertDialogを使用して自作ダイアログ画面を表示できると知り、そちらを実装しました。
そして画面表示自体は、.Create().Show() メソッドで問題なく上手くいきました。
またダイアログ画面からの、(ユーザー入力)値の受け渡しも問題なく上手くいきました。
ところが、ダイアログ画面を閉じるメソッドが見つかりません。4時間探し回ったものの結局わからないままです。
Android Studio/Java だと .dismiss() でOK、という記述を見つけたのですが、Xamarin/Android の場合はそういうメソッドが存在しませんでした。
.Create().Dismiss() はありましたが、実行しても変化なし(ダイアログ画面は閉じられません)
Android Studio/Java ならば .hide() というメソッドがあるそうで、そちらも調べてみたのですが、やはりXamarinには同一のメソッドがありません。
.Dispose() があったので試してみたのですが、ダイアログ画面は閉じられませんでした。
さらに調べてみたところ、
「AlertDialogを継承して、隠蔽されたDisMissメソッドを表に出す」
という方法を見つけたので実装してみたのですが、変化なし。
もしかすると、私がDismissメソッド及びDismissEventを誤解している可能性もありますが……。
C#
1 - AlertDialogを継承し、隠蔽されたDismissを公開 2 3public class CustomDialog : AlertDialog 4 { 5 public CustomDialog(Context context) : base(context) { } 6 7 //イベント定義 8 public event DismisEventDelegate DismisEvent; 9 public delegate void DismisEventDelegate(object sender, EventArgs e); 10 11 //Dismissイベントをオーバーライドしてイベントとして公開する 12 public override void Dismiss() 13 { 14 base.Dismiss(); 15 if (DismisEvent != null) 16 { 17 DismisEvent(this, null); 18 } 19 } 20 }
C#
1 - ダイアログ画面の定義 2 3private void SetDialog() 4 { 5 _inflater = LayoutInflater.From(this); 6 View _view = _inflater.Inflate(Resource.Layout.dialog_Search, null); 7 8 _dialog = new CustomDialog.Builder(this); 9 10 Button _btnInitialA = _view.FindViewById<Button>(Resource.Id.btnInitialA); 11 _btnInitialA.Click += btnInitial_Click; 12 13 _dialog.SetTitle("得意先検索"); 14 _dialog.SetPositiveButton("キャンセル", (sender, args) => { }); 15 _dialog.SetView(_view); 16 17 _dialog.Create(); 18 }
■教えて頂きたいこと
というわけで、AlertDialogをActivity側から表示した後、同じくActivity側で閉じる方法を教えて下さい。
もしくはDialog Fragmentを、Xamarin に実装するやり方でも構いません。
ただしAndroid.AppのFragmentを継承して実装する方法(こちらはWeb上でも見かける)は、前述の通り古過ぎてダメだそうです。新たな実装方法があれば、ご教示頂けるとありがたいです。
以上よろしくお願い致します。
回答1件