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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

7697閲覧

android AlertDialogで選択した後,呼び出し元とは別のアクティビティに遷移したい

sekaikan_ozaki

総合スコア65

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2019/08/29 04:11

編集2019/09/18 04:02

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}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Intent intent = new Intent(getApplication(), MainActivity.class);
上記の「getApplication()」について、
Activityクラス以外から呼ぶcontextの取得方法統一について
上記を参考にして見てください。
Fragmentなので、「getContext()」なのかな?
試してないので確証ありませんが。

投稿2019/08/30 01:23

jun74

総合スコア338

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

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

sekaikan_ozaki

2019/09/02 05:31

「getApplication()」を「getContext()」に変えたところ,上手くいきました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問