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

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

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

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

Android

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

Q&A

解決済

1回答

3829閲覧

Android ActivityからFragment内Fragmentの置き換えについて

negisuki

総合スコア12

Java

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

Android

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

0グッド

0クリップ

投稿2017/02/08 06:50

編集2017/02/08 06:54

初めまして。Androidにて開発をしておりまして、ActivityからFragment>Fragmentのviewの取得方法について質問させていただきます。

###前提・実現したいこと
Activityに配置したview(ID:container1)の中にFragment1があり
Fragment1に配置したview(ID:container2)の中にFragment2があります。
Activity上に配置したbuttonを押すことでFragment2をFragment3に遷移させたいです。(下図)
遷移
Fragment1はActivityのonCreate時にFragmentTransactionにて動的に追加されたもの、
Fragment2はFragment1のonCreateView時にFragmentTransactionにて動的に追加されたものです。

###試したこと・発生している問題
Fragment1を他のFragmentに変更するのは、
Activityから

Java

1FragmentHoge fragmenthoge = new FragmentHoge(); 2FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 3transaction.replace(R.id.container1, fragmenthoge); 4transaction.commit();

で出来、これはcontainer1がActivityのレイアウトにあるので問題ないのですが
今回の場合、Activityから

Java

1Fragment1 fragment1 = new Fragment1(); 2FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 3transaction.replace(R.id.container2, fragment3); 4transaction.commit();

としても、container2はFragment1のレイアウトにあるので参照できません。
ボタンを押しても何も反応せず、エラーなども出ません。

###質問
ActivityからID:container2を取得して、ActivityにあるButtonを押すことでFragment2をFragment3に遷移させるにはどのようにコードを書くべきでしょうか?
そもそものやり方が間違っているのかもしれませんが・・・

よろしくお願いします!

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記の実装でできると思いますよ。
1-Fragment1にFragment2からFragment3に切り替えメソッドを作成。
2-ActivityからFragment1の切り替えメソッドを呼び出す。

投稿2017/02/08 06:55

yona

総合スコア18155

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

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

negisuki

2017/02/08 07:38 編集

yonaさま さっそくのご回答、ありがとうございます。 コメントにコードを書いていいのか分からないのですが Activityで Fragment1 frag1とし ボタンクリック時の処理を frag1.changeFragment(); とした上で fragment1に public void changeFragment() { FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.container2, new fragment3()); transaction.addToBackStack(null); transaction.commit(); } を追加したのですがNullPointerExceptionが返ってきてしまいました。 書き方が悪いのでしょうか...?
yona

2017/02/08 08:35

できませんでしたじゃわかりません、エラーログを記載してください。
negisuki

2017/02/08 09:01

失礼しました。こちらでよろしいでしょうか。 24056-24056/com.example.hoge.testapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hoge.testapp, PID: 24056 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.hoge.testapp.Fragment1.changeFragment()' on a null object reference at com.example.hoge.testapp.MainActivity.onClick(MainActivity.java:121) at android.app.Instrumentation.callActivityonClick(Instrumentation.java:1240) at android.app.Instrumentation.callActivityonClick(Instrumentation.java:1252) at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:3425) at android.app.ActivityThread.performNewIntents(ActivityThread.java:3437) at android.app.ActivityThread.handleNewIntent(ActivityThread.java:3446) at android.app.ActivityThread.access$1900(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1872) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
yona

2017/02/08 09:08

MainActivity.javaの121行目で例外が発生しています。 例外が発生した場合はその部分になにが書かれているかを書きましょう。
negisuki

2017/02/08 09:20

不慣れで申し訳ないです。MainActivityの121行目にはボタンクリック時の処理 frag1.changeFragment(); を書いています。
yona

2017/02/08 09:41

frag1がインスタンスを参照していません。 参照型変数の初期化方法が間違っているようです。
negisuki

2017/02/10 05:36

変数の初期化を見直してから実行で遷移できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問