###前提・実現したいこと
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}