起動時にNavigationDrawerのヘッダにアイコンやユーザIDを表示したいのですが、ヘッダの要素にどのようにアクセスするのでしょうか。
また、ヘッダ要素に値を設定するのは初期起動時とユーザ設定を変更した場合を想定しています。それぞれどこで設定処理を記述するべきでしょうか。
(初期起動時はMainActivityのonCreate?変更反映時?)
構成は以下の通りです。
activity_main.xml
1<androidx.drawerlayout.widget.DrawerLayout> 2 <include 3 android:id="@+id/app_bar_main" /> 4 <com.google.android.material.navigation.NavigationView 5 android:id="@+id/nav_view" 6 app:headerLayout="@layout/nav_header_main" 7 app:menu="@menu/activity_main_drawer" /></androidx.drawerlayout.widget.DrawerLayout>
app_bar_main.xml
1<androidx.coordinatorlayout.widget.CoordinatorLayout tools:context=".MainActivity"> 2 <com.google.android.material.appbar.AppBarLayout> 3 <androidx.appcompat.widget.Toolbar 4 android:id="@+id/toolbar" /> 5 </com.google.android.material.appbar.AppBarLayout> 6 <include layout="@layout/content_main" /> 7</androidx.coordinatorlayout.widget.CoordinatorLayout>
nav_header_main.xml
1<LinearLayout > 2 <ImageView 3 android:id="@+id/imageView" /> 4 5 <LinearLayout> 6 <TextView 7 android:text="ユーザID:" /> 8 <TextView 9 android:id="@+id/txtDrawerHeaderUserID"/> 10 </LinearLayout> 11 12 <LinearLayout> 13 <TextView 14 android:text="ユーザ名:" /> 15 <TextView 16 android:id="@+id/txtDrawerHeaderUserName"/> 17 </LinearLayout> 18</LinearLayout>
MainActivity.kt
1class MainActivity : AppCompatActivity() { 2 3 private lateinit var appBarConfiguration: AppBarConfiguration 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 setSupportActionBar(binding.appBarMain.toolbar) 13 14 val drawerLayout: DrawerLayout = binding.drawerLayout 15 val navView: NavigationView = binding.navView 16 val navBottomView: BottomNavigationView = findViewById(R.id.bottom_navigation_view) 17 val navController = findNavController(R.id.nav_host_fragment_content_main) 18 19 // Passing each menu ID as a set of Ids because each 20 // menu should be considered as top level destinations. 21 appBarConfiguration = AppBarConfiguration( 22 setOf( 23 R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_dashboard, R.id.nav_notifications 24 ), drawerLayout 25 ) 26 setupActionBarWithNavController(navController, appBarConfiguration) 27 navView.setupWithNavController(navController) 28 navBottomView.setupWithNavController(navController) 29 30 // ↓取得できていない 31 //val txtID: android.widget.TextView = findViewById(R.id.txtDrawerHeaderUserID) 32 //txtID.text = "aaaaaaaaaaa" 33 } 34 35 override fun onCreateOptionsMenu(menu: Menu): Boolean { 36 // Inflate the menu; this adds items to the action bar if it is present. 37 menuInflater.inflate(R.menu.main, menu) 38 return true 39 } 40 41 override fun onSupportNavigateUp(): Boolean { 42 val navController = findNavController(R.id.nav_host_fragment_content_main) 43 return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() 44 } 45}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/26 13:25