如何解决在 Android Kotlin 中实现底部导航栏时出错
我是安卓开发的新手。 我尝试在我的应用程序中实现导航栏,从片段 A 切换到片段 B。 在片段 A 中有一个指向片段 c 的浮动操作按钮。 我通过导航栏从片段 A 切换到 B 没有问题,但是当我尝试从浮动操作按钮切换到片段 c 时,它给了我错误。
java.lang.IllegalStateException:查看 androidx.constraintlayout.widget.ConstraintLayout{65bf79f VE ..... 0,0-1080,1529 #7f0800b2 app:id/frameLayout } 没有设置 NavController
代码如下:
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dateView = findViewById<TextView>(R.id.dateTextView)
dateView.text = getMonth()
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_frag) as NavHostFragment
navController = navHostFragment.navController
setupActionBarWithNavController(navController)
val chartFrag = ChartsFragment()
val infoData = info_data()
val botNav = findViewById<BottomNavigationView>(R.id.botNavigation)
botNav.setonNavigationItemSelectedListener {
when(it.itemId){
R.id.menu_statement ->{
setCurrentFragment(infoData)
}
R.id.menu_charts ->{
setCurrentFragment(chartFrag)
}
}
true
}
}
fun setCurrentFragment(fragment: Fragment) = supportFragmentManager.beginTransaction().apply{
replace(R.id.nav_host_frag,fragment)
commit()
}
fun getMonth():String{
val calendar = Calendar.getInstance()
val simpleDateFormat = SimpleDateFormat("MMM yyyy")
val date = simpleDateFormat.format(calendar.time)
return date
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
info_data.kt
class info_data : Fragment() {
val dataSet = dataSource().loadData()
val adapter = RecyclerViewAdapter(dataSet)
companion object{
var income = 0.0
var expense = 0.0
}
lateinit var navController: NavController
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_info_data,container,false)
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val tvExpense = view.findViewById<TextView>(R.id.tvExpense)
tvExpense.text = "Expense : \n$ "+expense.toString()
val tvIncome = view.findViewById<TextView>(R.id.tvIncome)
tvIncome.text = "Income : \n$ "+income.toString()
val tvTotal = view.findViewById<TextView>(R.id.tvTotal)
tvTotal.text = "Total : \n$ "+grandTotal().toString()
val rv= view.findViewById<RecyclerView>(R.id.recyclerView)
rv.adapter = adapter
rv.layoutManager = linearlayoutmanager(activity)
val floatingBtn = view.findViewById<FloatingActionButton>(R.id.fabBtn)
floatingBtn.setonClickListener(){
goToNextScreen(view)
}
}
fun goToNextScreen(view: View){
navController = Navigation.findNavController(view)
navController!!.navigate(R.id.action_info_data_to_form_data2)
}
fun grandTotal():Double{
val inc = income
val exp = expense
val total = inc-exp
return total
}
}
**错误: 在 androidx.navigation.Navigation.findNavController(Navigation.java:84)
在 com.example.myapplication.info_data.goToNextScreen(info_data.kt:58)
在 com.example.myapplication.info_data.onViewCreated$lambda-0(info_data.kt:53)**
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。