質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

897閲覧

XamarinによるAndroidアプリ、二重に確認ダイアログが出てしまう

Seiten_Minagawa

総合スコア58

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/09/14 09:09

###前提・実現したいこと
XamarinとC#を使ったAndroidアプリ。
1つのActivityのみを持つアプリで、バックボタンを押した際に一度だけ確認のダイアログを出し、そこで終了するという選択をしてはじめてアプリが終了されるようにしたい。

###発生している問題・エラーメッセージ

Debug、Releaseビルド双方で確認のダイアログが2回出現し、1回でも「Yes」を押すと終了し、2回連続で「No」を押さないと終了せずそのままという状況。 エラーメッセージはない。 全て実機におけるテストの結果。

###事象の発生しているコード

MainActivity.cs

using Android.App; using Android.Widget; using Android.OS; using Android.Content; using Android.Views; namespace App1 { [Activity(Label = "Score", MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)] public class MainActivity : Activity { (中略) public override bool DispatchKeyEvent(KeyEvent e) { if (e.KeyCode == Keycode.Back) { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.SetTitle("Terminate Check"); alert.SetMessage("Really?"); alert.SetNegativeButton("No", (sender, args) => { }); alert.SetPositiveButton("Yes", (sender, args) => { Finish(); }); alert.Show(); } return base.DispatchKeyEvent(e); } protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); Window.AddFlags(Android.Views.WindowManagerFlags.KeepScreenOn); (中略) } } }

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio Community 2017、Xamarin、C#を使用。
テストに使用した端末はXperia XZ、Androidのバージョンは7.0。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バックボタンの押した時と放した時、両方に反応しているのでは?

https://developer.xamarin.com/api/property/Android.Views.KeyEvent.Action/

e.Actionもチェックすれば回避できると思います。

投稿2017/09/14 18:15

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Seiten_Minagawa

2017/09/15 11:02

バックボタンを判定する部分に追加条件として「e.Action == KeyEventAction.Down」を付け加えたところ、1回だけ表示されるようになりました! 理想の動作になりましたので、こちらの回答をベストアンサーとさせていただきます! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問