KotlinでAndroidアプリを作成しています。
下記コードの48行目でNullPointerエラーが発生しており、コードの何が問題なのかが特定できません。
Caused by: java.lang.NullPointerException: findViewById(R.id.floating_action_btn) must not be null
XMLのViewの方では当該ボタンは定義してあります。
お手数ですが、原因特定のヒントなどを頂けますと幸いです。
よろしくお願いいたします。
Kotlin
1package com.dream_engineering.cloud_budget_tracker.view 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.view.View 6import android.view.animation.Animation 7import android.view.animation.AnimationUtils 8import android.widget.Toast 9import androidx.fragment.app.Fragment 10import com.dream_engineering.cloud_budget_tracker.R 11import com.dream_engineering.cloud_budget_tracker.databinding.ActivityMainBinding 12import com.getbase.floatingactionbutton.FloatingActionButton 13 14class MainActivity : AppCompatActivity() { 15 16 private val rotateOpen: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_open_anim) } 17 private val rotateClose: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_close_anim) } 18 private val fromBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.from_botton_anim) } 19 private val toBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.to_bottom_anim) } 20 21 private lateinit var binding: ActivityMainBinding 22// val binding = ActivityMainBinding.inflate(layoutInflater) 23 24 25 private var clicked = false 26 private lateinit var addBtn: FloatingActionButton 27 private lateinit var spendingAddBtn: FloatingActionButton 28 private lateinit var incomeAddBtn: FloatingActionButton 29 private lateinit var bankAddBtn: FloatingActionButton 30 31 fun getAddBtn(): FloatingActionButton { 32 return addBtn 33 } 34 35 fun getSpendingBtn(): FloatingActionButton { 36 return spendingAddBtn 37 } 38 39 fun getIncomeBtn(): FloatingActionButton { 40 return incomeAddBtn 41 } 42 43 fun getBankBtn(): FloatingActionButton { 44 return bankAddBtn 45 } 46 47 override fun onCreate(savedInstanceState: Bundle?) { 48 super.onCreate(savedInstanceState) 49 binding = ActivityMainBinding.inflate(layoutInflater) 50 setContentView(binding.getRoot()); 51 52 addBtn = binding.floatingActionBtn 53 spendingAddBtn = binding.spendingBtn 54 incomeAddBtn = binding.incomeBtn 55 bankAddBtn = binding.bankBtn 56 57 setContentView(binding.root) 58 replaceFragments(StatsFragment()) 59 60 addBtn.setOnClickListener() { 61 onAddBtnClicked() 62 } 63 64 spendingAddBtn.setOnClickListener() { 65 Toast.makeText(this, "spending btn clicked", Toast.LENGTH_SHORT).show() 66 } 67 68 incomeAddBtn.setOnClickListener() { 69 Toast.makeText(this, "income btn clicked", Toast.LENGTH_SHORT).show() 70 } 71 72 bankAddBtn.setOnClickListener() { 73 Toast.makeText(this, "bank btn clicked", Toast.LENGTH_SHORT).show() 74 } 75 76 binding.bottomNavView.setOnItemReselectedListener { 77 78 when(it.itemId) { 79 R.id.stats -> replaceFragments(StatsFragment()) 80 R.id.search -> replaceFragments(SearchFragment()) 81 R.id.exchange -> replaceFragments(ExchangeFragment()) 82 83 else -> { 84 } 85 } 86 true 87 } 88 89 90 } 91 92 private fun replaceFragments(fragment: Fragment) { 93 val fragmentManager = supportFragmentManager 94 val fragmentTransaction = fragmentManager.beginTransaction() 95 fragmentTransaction.replace(R.id.frame_layout, fragment) 96 fragmentTransaction.commit() 97 } 98 99 private fun onAddBtnClicked() { 100 setAnimation(clicked) 101 setVisibility(clicked) 102 clicked = !clicked 103 } 104 105 private fun setAnimation(clicked: Boolean) { 106 if (!clicked) { 107 spendingAddBtn.startAnimation(fromBottom) 108 incomeAddBtn.startAnimation(fromBottom) 109 bankAddBtn.startAnimation(fromBottom) 110 addBtn.startAnimation(rotateOpen) 111 } else { 112 spendingAddBtn.startAnimation(toBottom) 113 incomeAddBtn.startAnimation(toBottom) 114 bankAddBtn.startAnimation(toBottom) 115 addBtn.startAnimation(rotateClose) 116 } 117 } 118 119 private fun setVisibility(clicked: Boolean) { 120 if (!clicked) { 121 spendingAddBtn.visibility = View.VISIBLE 122 incomeAddBtn.visibility = View.VISIBLE 123 bankAddBtn.visibility = View.VISIBLE 124 } else { 125 spendingAddBtn.visibility = View.INVISIBLE 126 incomeAddBtn.visibility = View.INVISIBLE 127 bankAddBtn.visibility = View.INVISIBLE 128 } 129 } 130 131}
XML
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".view.MainActivity"> 8 9 <FrameLayout 10 android:id="@+id/frame_layout" 11 app:layout_constraintBottom_toBottomOf="parent" 12 android:layout_width="0dp" 13 android:layout_height="0dp" 14 app:layout_constraintEnd_toEndOf="parent" 15 app:layout_constraintStart_toStartOf="parent" 16 app:layout_constraintTop_toTopOf="parent"> 17 18 </FrameLayout> 19 20 <com.google.android.material.floatingactionbutton.FloatingActionButton 21 android:id="@+id/bank_btn" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:layout_margin="16dp" 25 android:clickable="true" 26 android:contextClickable="true" 27 app:layout_constraintBottom_toBottomOf="parent" 28 app:layout_constraintBottom_toTopOf="@+id/income_btn" 29 app:layout_constraintEnd_toEndOf="parent" 30 android:visibility="invisible" 31 app:srcCompat="@drawable/bank" 32 tools:ignore="MissingConstraints" 33 android:contentDescription="Add transaction" 34 /> 35 36 <com.google.android.material.floatingactionbutton.FloatingActionButton 37 android:id="@+id/income_btn" 38 android:layout_width="wrap_content" 39 android:layout_height="wrap_content" 40 android:layout_margin="16dp" 41 android:clickable="true" 42 android:contextClickable="true" 43 app:layout_constraintBottom_toBottomOf="parent" 44 app:layout_constraintBottom_toTopOf="@+id/spending_btn" 45 app:layout_constraintEnd_toEndOf="parent" 46 app:srcCompat="@drawable/income" 47 android:visibility="invisible" 48 tools:ignore="MissingConstraints" /> 49 50 <com.google.android.material.floatingactionbutton.FloatingActionButton 51 android:id="@+id/spending_btn" 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content" 54 android:layout_margin="16dp" 55 android:clickable="true" 56 android:contextClickable="true" 57 app:layout_constraintBottom_toBottomOf="parent" 58 app:layout_constraintBottom_toTopOf="@+id/floating_action_btn" 59 app:layout_constraintEnd_toEndOf="parent" 60 android:visibility="invisible" 61 app:srcCompat="@drawable/spending" 62 tools:ignore="MissingConstraints" /> 63 64 <com.google.android.material.floatingactionbutton.FloatingActionButton 65 android:id="@+id/floating_action_btn" 66 android:layout_width="wrap_content" 67 android:layout_height="wrap_content" 68 android:layout_margin="16dp" 69 android:clickable="true" 70 android:contextClickable="true" 71 app:layout_constraintBottom_toBottomOf="parent" 72 app:layout_constraintBottom_toTopOf="@+id/bottom_nav_view" 73 app:layout_constraintEnd_toEndOf="parent" 74 android:visibility="visible" 75 app:srcCompat="@drawable/add" 76 tools:ignore="MissingConstraints" /> 77 78 <com.google.android.material.bottomnavigation.BottomNavigationView 79 android:id="@+id/bottom_nav_view" 80 android:layout_width="0dp" 81 android:layout_height="wrap_content" 82 app:layout_constraintBottom_toBottomOf="parent" 83 app:layout_constraintEnd_toEndOf="parent" 84 app:layout_constraintStart_toStartOf="parent" 85 app:menu="@menu/bottom_nav" 86 /> 87 88</androidx.constraintlayout.widget.ConstraintLayout>

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