teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

タブに実際にフラグメントを切り替えるコードを追加

2020/04/29 15:06

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -49,4 +49,46 @@
49
49
  としますと
50
50
  ![Home だけ Tab表示](73005cf8bac69374b0560c452283b9ab.jpeg)
51
51
  Home にだけタブが出るようになります.
52
- 後は Home でタブを選択した時に対応するクラグメントを fragment_home 内に表示するようにするだけに思いますが, 如何なのでしょうか.
52
+ 後は Home でタブを選択した時に対応するクラグメントを fragment_home 内に表示するようにするだけに思いますが, 如何なのでしょうか.
53
+
54
+ #追記
55
+ 例えばフラグメント3つ(HomeFragmentTab1/2/3)をタブで切り替えるとしますと, 以下のようになるかと思います.
56
+ ```java
57
+ public class HomeFragment extends Fragment {
58
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
59
+ return inflater.inflate(R.layout.fragment_home, container, false);
60
+ }
61
+ @Override
62
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
63
+ HomePagerAdapter adapter = new HomePagerAdapter(getChildFragmentManager());
64
+ ViewPager viewPager = view.findViewById(R.id.pager);
65
+ viewPager.setAdapter(adapter);
66
+
67
+ TabLayout tabLayout = view.findViewById(R.id.tab_layout);
68
+ tabLayout.setupWithViewPager(viewPager);
69
+ }
70
+
71
+ public static class HomePagerAdapter extends FragmentPagerAdapter {
72
+ HomePagerAdapter(FragmentManager fm) {
73
+ super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
74
+ }
75
+ @Override
76
+ public int getCount() {
77
+ return 3;
78
+ }
79
+ @Override
80
+ public Fragment getItem(int i) {
81
+ switch(i) {
82
+ case 0: return new HomeFragmentTab1();
83
+ case 1: return new HomeFragmentTab2();
84
+ case 2: return new HomeFragmentTab3();
85
+ }
86
+ return null;
87
+ }
88
+ @Override
89
+ public CharSequence getPageTitle(int position) {
90
+ return "tab " + (position + 1);
91
+ }
92
+ }
93
+ }
94
+ ```