🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1092閲覧

viewPager+fragmentでタブ切り替えを実装したい

j.f15

総合スコア23

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/01/18 08:16

前提・実現したいこと

正しいid参照したい。

発生している問題・エラーメッセージ

flagment+viewPagerでタブ切り替えの機能を作成しています。
一通り記述が終わり実行してみるとアプリが強制終了してしまいます。

エラーを確認した所、
bookingPager.adapter = _adapterTabのbookingPagerの値がnullになっていました。

↓デバッグログとエラー文です

D/!adapterTab!: microwave.net.PGM.GolfCourseReservationApp.booking.TabBookingAdapter@65b42b4 D/!bookingPager!: null
Caused by: java.lang.NullPointerException: bookingPager must not be null at microwave.net.PGM.GolfCourseReservationApp.MainActivity.onCreate(MainActivity.kt:42) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

該当のソースコード

kotlin

1class MainActivity : AppCompatActivity() { 2 3// private var _adapterTab : TabBookingAdapter? = null 4 private lateinit var binding: ActivityMainBinding 5 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 9 binding = ActivityMainBinding.inflate(layoutInflater) 10 setContentView(binding.root) 11 12 val navView: BottomNavigationView = binding.navView 13 14 val navController = findNavController(R.id.nav_host_fragment_activity_main) 15 // Passing each menu ID as a set of Ids because each 16 // menu should be considered as top level destinations. 17 val appBarConfiguration = AppBarConfiguration(setOf( 18 R.id.navigation_home, R.id.navigation_booking, R.id.navigation_list)) 19 setupActionBarWithNavController(navController, appBarConfiguration) 20 navView.setupWithNavController(navController) 21 22 //タイトルバー非表示 23 supportActionBar?.hide() 24 25 var _adapterTab : TabBookingAdapter? = TabBookingAdapter(supportFragmentManager, this) 26 Log.d("!adapterTab!", ""+_adapterTab) 27 Log.d("!bookingPager!", ""+bookingPager) 28 bookingPager.adapter = _adapterTab 29 Log.d("!bookingPager!", ""+bookingPager) 30 tabBookingLayout.setupWithViewPager(bookingPager) 31 } 32}

↓xmlファイル、一部省略しています。

kotlin

1<androidx.viewpager.widget.ViewPager 2 android:id="@+id/bookingPager" 3 android:layout_width="match_parent" 4 android:layout_height="0dp" 5 android:layout_marginHorizontal="10dp" 6 android:layout_marginTop="20dp" 7 app:layout_constraintBottom_toTopOf="@+id/imageButton17" 8 app:layout_constraintEnd_toEndOf="parent" 9 app:layout_constraintStart_toStartOf="parent" 10 app:layout_constraintTop_toBottomOf="@+id/constraintLayout1"> 11 12 <com.google.android.material.tabs.TabLayout 13 android:id="@+id/tabBookingLayout" 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" 16 android:background="#dddddd" 17 app:tabBackground="@drawable/tab_color_selector" 18 app:tabIndicatorHeight="0dp" 19 app:tabSelectedTextColor="@color/white" 20 app:tabTextAppearance="@style/TabText" 21 app:tabTextColor="#3087DD"> 22 23 <com.google.android.material.tabs.TabItem 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:text="@string/normal_booking_tab" /> 27 28 <com.google.android.material.tabs.TabItem 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:text="@string/one_person_booking_tab" /> 32 33 </com.google.android.material.tabs.TabLayout> 34 35 </androidx.viewpager.widget.ViewPager>

試したこと

id周りでバグがあるのかと思いデザインビューでidを確認したのですがおかしな点は無かったです。
キャッシュのクリアも試してみたのですがエラーは消えませんでした。

少しでもわかる方がいましたらご教示お願いしたいです。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

kotlin

1 binding.bookingPager.adapter = _adapterTab 2 binding.tabBookingLayout.setupWithViewPager(binding.bookingPager)

昨日ViewBindingを触ったばかりだからあまり知らないけど、XML内で定義された要素はすべてbindingのメンバとして参照すべきではないですか。
(というか、bookingPagerが定義されていないので掲示されたソースコードではビルドすらできないと思うのですが)

投稿2021/01/19 00:17

katsuko

総合スコア3536

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

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

j.f15

2021/01/19 01:02

回答ありがとうございます。 まさにその通りでした… binding.〇〇のような形にしたところ、無事に実行でき望み通りの動作することが出来ました。 (bindingの理解の浅さを痛感します…) 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問