前提・実現したいこと
「はじめてのAndroidプログラミング 第5版」という本を参考に学習しております。
その中で、予期せぬ順番で処理が動いており困っています。
具体的には以下のソースコード中に記載しました(1)の後に(3)以降が走り、(4)、(5)と進んで最終的に「Caused by: kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized」が発生してアプリが起動しません。
デバッグしたところ(2)以降の処理は(5)までの間に行われていないようです。
想定では(1)、(2)、(3)、(4)、(5)の順番で処理されると思いました。
記載ミスや、何かあればご教示お願いいたします。
該当のソースコード
MainActivity.kt(kotlin)
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)・・・・・・・・・・・・・・・(1) 10 setContentView(binding.root)・・・・・・・・・・・・・・・・・・・・・・・・・・・ (2) 11 12 setSupportActionBar(binding.toolbar) 13 14 val navController = findNavController(R.id.nav_host_fragment_content_main) 15 appBarConfiguration = AppBarConfiguration(navController.graph) 16 setupActionBarWithNavController(navController, appBarConfiguration) 17 18 binding.fab.setOnClickListener { view -> 19 navController.navigate(R.id.action_to_scheduleEditFragment) 20 } 21 } 22 23 override fun onSupportNavigateUp(): Boolean { 24 val navController = findNavController(R.id.nav_host_fragment_content_main) 25 return navController.navigateUp(appBarConfiguration) 26 || super.onSupportNavigateUp() 27 } 28 29 fun setFabVisible(visibility: Int) { 30 binding.fab.visibility = visibility・・・・・・・・・・・・・・・・・・・・・・・・(5) 31 } 32}
FirstFragment.kt(kotlin)
1class FirstFragment : Fragment() { 2 3 private var _binding: FragmentFirstBinding? = null 4 private val binding get() = _binding!! 5 private lateinit var realm: Realm 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 realm = Realm.getDefaultInstance() 10 } 11 12 override fun onCreateView( 13 inflater: LayoutInflater, container: ViewGroup?, 14 savedInstanceState: Bundle? 15 ): View? { 16 _binding = FragmentFirstBinding.inflate(inflater, container, false) 17 return binding.root 18 } 19 20 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 21 super.onViewCreated(view, savedInstanceState)・・・・・・・・・・・・・・・・・・・・(3) 22 23 view.findViewById<Button>(R.id.button_first).setOnClickListener { 24 findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) 25 } 26 27 binding.list.layoutManager = LinearLayoutManager(context) 28 val schedules = realm.where<Schedule>().findAll() 29 val adapter = ScheduleAdapter(schedules) 30 binding.list.adapter = adapter 31 32 adapter.setOnItemClickListener { id -> 33 id?.let { 34 findNavController().navigate(R.id.action_to_scheduleEditFragment) 35 } 36 } 37 38 (activity as? MainActivity)?.setFabVisible(View.VISIBLE)・・・・・・・・・・・・・・・(4) 39 } 40 41 override fun onDestroyView() { 42 super.onDestroyView() 43 _binding = null 44 } 45 46 override fun onDestroy() { 47 super.onDestroy() 48 realm.close() 49 } 50}
補足情報
本の内容としてはNavigationコンポーネントを使用した学習内容となっています。

回答2件
あなたの回答
tips
プレビュー