質問編集履歴

1 コードの編集

sekaikan_ozaki

sekaikan_ozaki score 57

2019/09/18 13:02  投稿

android AlertDialogで選択した後,呼び出し元とは別のアクティビティに遷移したい
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
public class MainActivity extends AppCompatActivity {
@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
//中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Intent intent = new Intent(getApplication(), SubActivity.class);
      startActivity(intent);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
```
↓SubActivity.java
```java
public class VisonApiActivity extends AppCompatActivity {
public class SubActivity extends AppCompatActivity {
@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
//中略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                // ダイアログクラスをインスタンス化
                AlertDialog dialog = new AlertDialog ();
                // 表示 getFagmentManager()は固定、sampleは識別タグ
                dialog.show(getFragmentManager(),"sample");
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
```
↓AlertDialogクラス
```java
public class AlertDialog extends DialogFragment {
   // ダイアログが生成された時に呼ばれるメソッド ※必須
   public Dialog onCreateDialog(Bundle savedInstanceState){
       // 選択肢のリスト
       String[] menulist = {〇〇};
       // ダイアログ生成 AlertDialogのBuilderクラスを指定してインスタンス化します
       AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
       alert.setItems(menulist, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int idx) {
               // 選択1
               if (idx == 0) {
           //ここでMainActivityに画面遷移したいです   
                   Intent intent = new Intent(getApplication(), MainActivity.class);
                   startActivity(intent);
               }
           }
       });
       // dialogBulderを返す
       return alert.create();
   }
}
```
  • Java

    20555 questions

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

  • Android

    8973 questions

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

  • Android Studio

    5576 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る