こんにちは、
趣味でアプリケーションを作っているものです。
現在FragmentTabHostを用いてActivityを一つだけ持つアプリを作成しております。
その中で「FragmentTabHostで表示中のFragmentのインスタンスを取得したい」場面が出てきました。
叶えたい理由や遭遇した問題は以下のとおりです。
######叶えたい理由
・Tab1で操作や入力をして、決定を押すとTab2へ移動する、という挙動を叶えたい。
・入力はTab1で、機能諸々はTab2で実装したい。
→ Tab2内で入力を省略して機能を使うことも可能なので、機能はTab2に押し込めたい。
######遭遇した問題や試したこと
・tab1で入力完了をMainActivityへ一度伝え、MainActivityがTabを切り替えつつ値を引き渡す処理を考えている
・FragmentManager#getFragments()を用いて一覧を取得し、instanceOfなどでメソッドを利用しようとした
→ getFragments()の返り値がsize1のリスト(Tab1のみを含む)であり、Tab2を取得できなかった。
→ ならばと思いFragmentTabHost#setCurrentTabでTabを切り替えてから一覧を取得したが、やはりTab1のみを含むSize1のListしか返ってこなかった。
・FragmentManager#findFragmentById)を用いてLayout内Containerに含まれているFragmentのインスタンスを表示しようとした。
→ FragmentTabHost#setCurrentTabも合わせて試したが、やはりTab1しか入手できなかった。
######コード
Java
1class MainActivity extends FragmentActivity implements....{ 2 //諸々省略 3 4 //Tab1のFragmentから呼ばれるメソッド 5 void didInput(String param1, ......){ 6 //ここでFragmentTab2を取得したい。以下2パターンとも失敗した。 7 8 //パターン1 9 tabHost.setCurrentTab(1); 10 List<Fragment> fragmentList = getSupportFragmentmanager().getFragments();//長さ1のListしか返ってこない 11 for(Fragment fragment: fragmentList){ 12 if(fraagment instanceOf FragmentTab2){ 13 ((FragmentTab2)fragment).methodHoge(param1,......); 14 } 15 } 16 17 18 //パターン2 19 tabHost.setCurrentTab(1); 20 Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);//ここで取得されるものはFragmentTab1 21 if(fraagment instanceOf FragmentTab2){ 22 ((FragmentTab2)fragment).methodHoge(param1,......); 23 } 24 } 25}
以上です。
TabHostを使う場合のTab間でのパラメータの引き渡し方法が悪いのでしょうか?
根本的な考え方の指摘も含め、皆様のお力をお借りできれば幸いです。
ご教授のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。