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

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

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

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

Q&A

解決済

2回答

2370閲覧

FragmentPagerAdapterのFragmentManagerでの管理

kaaa

総合スコア29

Android

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

0グッド

0クリップ

投稿2015/03/26 12:46

FragmentPagerAdapterをFragment内で使っているのですが、以下のFragmentを表示する時、1回目は表示されるのですが、2回目からFragmentPagerAdapterが?正常に呼び出されず、FragmentAもFragmentBも表示されません。
FragmentPagerAdapter内はFragmentmanagerにて管理されているため、Fragmentmanagerを更新させる必要があるなどと書かれていたので、それが原因かと素人的に思ったりするのですが、何が原因なのでしょうか?
また、解決方法も具体的にご教示頂けますと幸いでございます。どうぞよろしくお願いいたします。

lang

1public class Top extends Fragment { 2 3 public static Top newInstance() { 4 return new Top(); 5 } 6 7 @Override 8 public void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 11 12 } 13 14 @Override 15 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 16 View view = inflater.inflate(R.layout.top, container, false); 17 18 // ViewPagerにMyPagerAdapterを設定 19 ViewPager pager = (ViewPager) view.findViewById(R.id.pager); 20 pager.setAdapter(new MyPagerAdapter(getFragmentManager())); 21 22 // PagerSlidingTabStripにViewPagerを設定 23 PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs); 24 tabs.setViewPager(pager); 25 26 getActivity().setTitle("テスト"); 27 28 return view; 29 } 30 31 @Override 32 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 33 super.onCreateOptionsMenu(menu, inflater); 34 inflater.inflate(R.menu.menu, menu); 35 } 36 37 private class MyPagerAdapter extends FragmentPagerAdapter { 38 39 private final String[] TITLES = {"A", "B"}; 40 41 public MyPagerAdapter(FragmentManager fm) { 42 super(fm); 43 } 44 45 @Override 46 public Fragment getItem(int position) { 47 switch (position) { 48 case 0: 49 return new FragmentA(); 50 case 1: 51 return new FragmentB(); 52 } 53 54 return null; 55 } 56 57 58 @Override 59 public int getCount() { 60 return TITLES.length; 61 } 62 63 @Override 64 public CharSequence getPageTitle(int position) { 65 return TITLES[position]; 66 } 67 } 68}

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

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

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

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

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

guest

回答2

0

自己解決

他の方に教えて頂きました。
以下で、解決できました。

Fragment in Fragmentになるので、getChildFragmentManager()を渡すのが正しいです。

// ViewPagerにMyPagerAdapterを設定
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));

投稿2015/03/27 02:10

kaaa

総合スコア29

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

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

iciclize

2015/03/27 06:26

あ、そうでしたか!そういえば自分も以前getChildFragmentManager()にしてなくてうまく行かなかった経験がありました…
guest

0

こんにちは。横浜に住む高校生です。
私は実はまだAndroidの中について詳しくはないのですが、問題があるとしたらFragmentA, FragmentBをnewで生成しているところだと思います。詳しい説明は他の回答者さんに任せたいと思いますが、解決策として、new FragmentA()ではなくFragmentA.newInstance()にすればひとまずうまくいくのではないかと思います。

投稿2015/03/27 01:23

iciclize

総合スコア130

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問