PCスペック
Windows10 HOME 64bit
メモリ 32GB
プロセッサ Intel Core i7-8700CPU 3.20GHz
Android Studio 3.4.1(最新ver)
デモ用端末(XPERIA OS:7.0 API 24)
やりたいことはタイトルのとおりです.
いま僕のアプリには,
①MainActivity.Java
②subActivity.Java
③AlertDialogクラス
があります.
subActivity内で,DialogFragmenntを継承したAlertDialogクラスのオブジェクトを生成し,Dialog onCreateDialog()メソッドを呼んでいます.
画面に表示されたAlertDialogをタップすると,MainActivity画面へ,AlertDialogでタップされた値ごと遷移させたいです.
現状のソースは以下になります.
エラーが出ている箇所は,AlertDialogクラスのIntentの部分です.getApplication()と記述していることが原因でエラーとなっています.
この部分を,「Intent intent = new Intent(SubActivity.this, MainActivity.class);」に書き換えたところ,「'SubActivity' is not an enclosing class」と出てしまい,関連つけさせてない的なエラーになってしまいます.
また以前の質問で,Activityの内部クラスとして,AlertDialogクラスを作ってその中にIntentを実装しようと思ったら,staticでないメソッドIntentをstaticクラスの内部で記述することができなかった経緯もあります.(クラスのstaticも外せなかった)
タイトルの通りの挙動を実現させるには,現状のどの部分を修正すべきなのでしょうか??
↓MainActivity.java
java
1public class MainActivity extends AppCompatActivity { 2@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5//中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 Intent intent = new Intent(getApplication(), SubActivity.class); 7 startActivity(intent); 8 9//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 } 11}
↓SubActivity.java
java
1public class SubActivity extends AppCompatActivity { 2@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 6//中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 7 8 // ダイアログクラスをインスタンス化 9 AlertDialog dialog = new AlertDialog (); 10 // 表示 getFagmentManager()は固定、sampleは識別タグ 11 dialog.show(getFragmentManager(),"sample"); 12 13//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 } 15}
↓AlertDialogクラス
java
1public class AlertDialog extends DialogFragment { 2 3 4 // ダイアログが生成された時に呼ばれるメソッド ※必須 5 public Dialog onCreateDialog(Bundle savedInstanceState){ 6 7 // 選択肢のリスト 8 String[] menulist = {〇〇}; 9 // ダイアログ生成 AlertDialogのBuilderクラスを指定してインスタンス化します 10 AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); 11 12 alert.setItems(menulist, new DialogInterface.OnClickListener() { 13 @Override 14 public void onClick(DialogInterface dialog, int idx) { 15 // 選択1 16 if (idx == 0) { 17 18 //ここでMainActivityに画面遷移したいです 19 Intent intent = new Intent(getApplication(), MainActivity.class); 20 startActivity(intent); 21 22 } 23 24 } 25 }); 26 27 // dialogBulderを返す 28 return alert.create(); 29 } 30 31 32}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/02 05:31