実現したいこと
android studioでアプリを開発している。
メニューバーを作ろうとしており、ナビゲーションコントローラーを取得したい。
前提
BottomNavigationViewによる画面の移行をしようとしている。メニューバーとナビゲーションを関連付けさせるためにメニューコンポーネントとナビゲーションコントローラーをそれぞれ変数に代入しようとした。しかし、ナビゲーションホストフラグメントを取得する部分でエミュレーターで動作させているアプリが落ち、繰り返し停止しています、という表示が出る。
発生している問題・エラーメッセージ
↓デバッガー
savedInstanceState と赤文字で表示された
↓コンソール
Open logcat panel for emulator Pixel 3a API 34 extension level 7 x86 64 ターゲット VM に接続しました。アドレス : 'localhost:61248'、トランスポート: 'ソケット' ターゲット VM から切断されました。アドレス: 'localhost:61248'、トランスポート: 'ソケット'
↓ビルドの出力
We recommend using a newer Android Gradle plugin to use compileSdk = 34 This Android Gradle plugin (8.0.2) was tested up to compileSdk = 33. You are strongly encouraged to update your project to use a newer Android Gradle plugin that has been tested with compileSdk = 34. If you are already using the latest version of the Android Gradle plugin, you may need to wait until a newer version with support for compileSdk = 34 is available. To suppress this warning, add/update android.suppressUnsupportedCompileSdk=34 to this project's gradle.properties.
該当のソースコード
Kotlin
1package com.example.test2 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import androidx.navigation.findNavController 6import androidx.navigation.fragment.NavHostFragment 7import androidx.navigation.ui.NavigationUI 8import com.google.android.material.bottomnavigation.BottomNavigationView 9 10class MainActivity : AppCompatActivity() { 11 override fun onCreate(savedInstanceState: Bundle?) { 12 // 下部メニューコンポーネントの取得 13 val bottomNavView: BottomNavigationView = findViewById(R.id.bottom_nav) 14 15 //ナビゲーションコントローラーを取得したい 16 //ここで失敗 17 val navController = findNavController(R.id.fragmentContainerView) 18 19 //これでも失敗 20 val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment 21 val navController = navHostFragment.navController 22 23 // 下部メニューとナビゲーションを関連付け 24 NavigationUI.setupWithNavController(bottomNavView, navController) 25 26 super.onCreate(savedInstanceState) 27 setContentView(R.layout.activity_main) 28 } 29}
試したこと
ブレークポイントを使用してタイムアウトの原因がナビゲーションコントローラーの文であることを確認した。
ナビゲーションコントローラーをホストフラグメントを取得し、そこからコントローラーを取得することも試したが、結果は同じだった。
回答1件
あなたの回答
tips
プレビュー