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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

2回答

3180閲覧

[Android]alertdialogを表示したい

Anko_shogi

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/02/14 18:36

編集2017/02/15 16:09

###前提・実現したいこと
Androidアプリでalertdialogを表示しようとしています。
main以外の他クラスのメソッドで表示処理をしたいです。

###発生している問題・エラーメッセージ
他クラスのメソッドでalertdialogのbuilder.show()をしています。
しかしその時に表示されず次の処理に進んでしまい、困っています。

###該当のソースコード
言語はjavaです。
ソースコードは以下の通りです。

java

1 public int promote_user_ans = 0; 2 public void checkactofkoma_subfunc_promote_display(MainActivity mainActivity) 3 { 4 AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); 5 builder.setMessage("成りますか") 6 .setPositiveButton("はい", new DialogInterface.OnClickListener() { 7 public void onClick(DialogInterface dialog, int id) { 8 promote_user_ans = 1; 9 } 10 }) 11 .setNegativeButton("いいえ", new DialogInterface.OnClickListener() { 12 public void onClick(DialogInterface dialog, int id) { 13 promote_user_ans = -1; 14 } 15 }); 16 builder.show(); 17 //ここで表示されてない 18 } 19 //成るかならないかを決めてもらう関数 20 public int checkactofkoma_subfunc_promote(MainActivity mainActivity) 21 { 22 Log.d("promote check","promote check"); 23 //display 24 checkactofkoma_subfunc_promote_display(mainActivity); 25//この時点でalertdialogが出ていてほしい 26//そして選択されるまで以下の処理に進まないでほしい 27 if(promote_user_ans == -1){ 28 Log.d("promote check","no"); 29 promote_user_ans = 0; 30 return StaticNumber.promote_no; 31 } 32 else{ 33 Log.d("promote check","yes"); 34 promote_user_ans = 0; 35 return StaticNumber.promote_yes; 36 } 37 }

###試したこと
止めたい場所でループ回せば来るかなと思って

java

1public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 2 //... 3 public void re_create_view() { 4 View vg = findViewById(R.id.activity_main); 5 super.onResume(); 6 vg.invalidate(); 7 } 8 //... 9}

java

1 public int checkactofkoma_subfunc_promote(MainActivity mainActivity) 2 { 3 //... 4 while(promote_user_ans == 0){ 5 //mainActivityに戻る 6 mainActivity.re_create_view(); 7 } 8 //... 9 }

としてみたのですが、無限ループになりアプリが落ちました。
ググったら、
UI処理とこういう処理が別スレッドで実行されていると分かりました。
方法としては
・自作マルチスレッドで処理する
・ダイアログ風のviewを作る
等がありましたが、
これらを含めて何か良い方法があれば教えていただきたいです。
また、マルチスレッド処理になる場合など、
参考URLがあれば書いていただけれ幸いです。

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:Android Studio
エミュレータ:Nexus 5X API 24
言語:java・xml
//関係ないかもしれませんが…
//処理順:
MainActivity
->...
...
->checkactofkoma_subfunc_promote
->checkactofkoma_subfunc_promote_display
//view:activity_mainのみ

C言語ばっかりやってきた人間なのでうまく書けてなくてすみません。
何卒宜しくお願い致します。

//追記依頼に対する内容
「どこからどう呼び出す」というのは記述したつもりでしたが、
再度まとめて以下に示します。
分かりにくければまた仰っていただけると幸いです。

java

1public class CheckActOfKoma_subfunc { 2 //... 3 public int checkactofkoma_subfunc1(MainActivity mainActivity,...) 4 { 5 //... 6 if(checkactofkoma_subfunc_promote(mainActivity) == StaticNumber.promote_yes) 7 return StaticNumber.Koma_promote_Sente_; 8 else if(/*...*/){/*...*/} 9 //... 10 return StaticNumber.Koma_no_promote____; 11 } 12 public int promote_user_ans = 0; 13 public void checkactofkoma_subfunc_promote_display(MainActivity mainActivity) 14 { 15 //... 16 builder.show(); 17 } 18 19 //成るかならないかを決めてもらう関数 20 public int checkactofkoma_subfunc_promote(MainActivity mainActivity) 21 { 22 Log.d("promote check","promote check"); 23 //display 24 checkactofkoma_subfunc_promote_display(mainActivity); 25 //... 26 } 27}

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

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

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

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

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

swordone

2017/02/15 02:41

このAlertDialogを生成するメソッドをどこからどう呼び出しているのかわからないので、その周辺のコードを載せてください。
swordone

2017/02/15 16:50

MainActivityからどう呼び出しているかが問題なのですが…
guest

回答2

0

さきほどの回答はダイアログ表示とは関係ないので、処理の流れについての回答に変更させて頂きます。
ダイアログの表示は非同期なので、いつ表示されるかは分かりません。
なので、ダイアログの「はい」「いいえ」の各ボタンが押された時にそれぞれ対応するメソッドを呼ぶ形にしたほうが良いと思います。

java

1 public int promote_user_ans = 0; 2 public void checkactofkoma_subfunc_promote_display(MainActivity mainActivity) 3 { 4 AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity); 5 builder.setMessage("成りますか") 6 .setPositiveButton("はい", new DialogInterface.OnClickListener() { 7 public void onClick(DialogInterface dialog, int id) { 8 onPromote(); 9 } 10 }) 11 .setNegativeButton("いいえ", new DialogInterface.OnClickListener() { 12 public void onClick(DialogInterface dialog, int id) { 13 onCancelPromote(); 14 } 15 }); 16 builder.show(); 17 //ここで表示されてない 18 } 19 20 //成るかならないかを決めてもらう関数 21 public void checkactofkoma_subfunc_promote(MainActivity mainActivity) 22 { 23 Log.d("promote check","promote check"); 24 //display 25 checkactofkoma_subfunc_promote_display(mainActivity); 26 } 27 28 void onPromote() { 29 Log.d("promote check","yes"); 30 promote_user_ans = 1; 31 } 32 33 void onCancelPromote() { 34 Log.d("promote check","no"); 35 promote_user_ans = -1; 36 } 37

投稿2017/02/15 01:31

編集2017/02/15 02:16
mingos

総合スコア4025

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

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

swordone

2017/02/15 01:52

関係ないと思います。 AlertDialog.Builder#show()はcreate()してからshow()するとドキュメントに書いてあります。
mingos

2017/02/15 01:57

失礼しました。 自分はこれまでcreate().show()と書いていたもので。
mingos

2017/02/15 02:05

builder.show()で問題ないようなので、処理の流れに関する内容に回答を変更しました。
guest

0

れらを含めて何か良い方法があれば教えていただきたいです

Dialog | API Guids
ではAlertDialogはDialog Fragmentを継承して作っています

参考URL

こちら
参考

投稿2017/02/14 22:54

aja

総合スコア3733

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問