前提・実現したいこと
AndroidStudio(Java)でスワイプもできるタブを実装したいです。
色々調べていたところ、ViewPager2とTabLayoutを使用する方法がよいのかと思い、
以下のサイトを参考にコードを組んでみました。
【参考】
https://developer.android.google.cn/guide/navigation/navigation-swipe-view-2?hl=ja#java
発生している問題
エラーはすべて解消したのですが、何も表示されません。
サンプル通りにコーディングしたつもりなのですが、どこが足りないのか自分には見つけることができませんでした。
アドバイスお願い致します。
該当のソースコード
【VAL003Activity.java】
java
1public class VAL003Activity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_val003); 7 8 // パラメータを取得する 9 Intent intent = getIntent(); 10 int titleCd = intent.getIntExtra("titleCd", 0); 11 12 // Fragmentを作成する 13 DetailInfoFragment detailInfoFragment = DetailInfoFragment.newInstance(titleCd); 14 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 15 // 新しく追加を行うのでaddを使用する 16 transaction.add(R.id.layout_fragment, detailInfoFragment); 17 // 最後にcommitを使用することで変更を反映する 18 transaction.commit(); 19 } 20}
【DetailInfoFragment.java】
java
1public class DetailInfoFragment extends Fragment { 2 private static final String ARG_titleCd = "titleCd"; 3 4 private int mTitleCd; 5 6 DemoCollectionAdapter demoCollectionAdapter; 7 ViewPager2 viewPager; 8 9 public DetailInfoFragment() { 10 // Required empty public constructor 11 } 12 13 /** 14 * Use this factory method to create a new instance of 15 * this fragment using the provided parameters. 16 * 17 * @param titleCd タイトルコード. 18 * @return A new instance of fragment DetailInfoFragment. 19 */ 20 public static DetailInfoFragment newInstance(int titleCd) { 21 DetailInfoFragment fragment = new DetailInfoFragment(); 22 Bundle args = new Bundle(); 23 args.putInt(ARG_titleCd, titleCd); 24 fragment.setArguments(args); 25 return fragment; 26 } 27 28 @Override 29 public void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 if (getArguments() != null) { 32 mTitleCd = getArguments().getInt(ARG_titleCd); 33 } 34 } 35 36 @Override 37 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 38 // Inflate the layout for this fragment 39 return inflater.inflate(R.layout.fragment_detail_info, container, false); 40 } 41 42 @Override 43 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 44 demoCollectionAdapter = new DemoCollectionAdapter(this); 45 viewPager = view.findViewById(R.id.pager); 46 viewPager.setAdapter(demoCollectionAdapter); 47 48 // タブを追加する 49 TabLayout tabLayout = view.findViewById(R.id.tab_layout); 50 new TabLayoutMediator(tabLayout, viewPager, 51 new TabLayoutMediator.TabConfigurationStrategy() { 52 @Override 53 public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { 54 tab.setText("OBJECT " + (position + 1)); 55 } 56 } 57 ).attach(); 58 } 59 60 public class DemoCollectionAdapter extends FragmentStateAdapter { 61 public DemoCollectionAdapter(Fragment fragment) { 62 super(fragment); 63 } 64 65 @NonNull 66 @Override 67 public Fragment createFragment(int position) { 68 // Return a NEW fragment instance in createFragment(int) 69 Fragment fragment = new DetailInfoObjectFragment(); 70 Bundle args = new Bundle(); 71 // Our object is just an integer :-P 72 args.putInt(DetailInfoObjectFragment.ARG_OBJECT, position + 1); 73 fragment.setArguments(args); 74 return fragment; 75 } 76 77 @Override 78 public int getItemCount() { 79 return 100; 80 } 81 } 82}
【DetailInfoObjectFragment.java】
java
1public class DetailInfoObjectFragment extends Fragment { 2 public static final String ARG_OBJECT = "object"; 3 4 @Nullable 5 @Override 6 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, 7 @Nullable Bundle savedInstanceState) { 8 return inflater.inflate(R.layout.fragment_detail_info_object, container, false); 9 } 10 11 @Override 12 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 13 Bundle args = getArguments(); 14 ((TextView) view.findViewById(R.id.textView)) 15 .setText(Integer.toString(args.getInt(ARG_OBJECT))); 16 } 17}
【fragment_detail_info.xml】
xml
1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context=".fragments.DetailInfoFragment"> 7 8 <com.google.android.material.tabs.TabLayout 9 android:id="@+id/tab_layout" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" /> 12 13 <androidx.viewpager2.widget.ViewPager2 14 android:id="@+id/pager" 15 android:layout_width="match_parent" 16 android:layout_height="0dp" 17 android:layout_weight="1" /> 18 19</RelativeLayout>
【fragment_detail_info_object.xml】
xml
1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context=".fragments.DetailInfoObjectFragment"> 7 8 <TextView 9 android:id="@+id/textView" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:text="TextView" /> 13 14</RelativeLayout>
回答1件
あなたの回答
tips
プレビュー