Code: Select all
UnreviewedFragmentWenn ich jedoch das EditFragment mit dem folgenden Code in MainActivity.kt eingebe:
Code: Select all
addButton.setOnClickListener {
supportFragmentManager.commit {
replace(R.id.fragmentContainerView, "edit")
}
reviewedButton.isEnabled = true
unreviewedButton.isEnabled = true
}
Code: Select all
unreviewedButton.setOnClickListener {
Log.d("MainActivity", "Unreviewed Button pressed! Is it enabled: ${unreviewedButton.isEnabled}")
if (supportFragmentManager.findFragmentByTag("edit") != null) {
supportFragmentManager.commit {
replace(R.id.fragmentContainerView, "restaurants")
}
}
supportFragmentManager.executePendingTransactions()
restaurantsFragment.setModeUnreviewed()
unreviewedButton.isEnabled = false
reviewedButton.isEnabled = true
}
reviewedButton.setOnClickListener {
Log.d("MainActivity", "Reviewed Button pressed! Is it enabled: ${reviewedButton.isEnabled}")
if (supportFragmentManager.findFragmentByTag("edit") != null) {
supportFragmentManager.commit {
replace(R.id.fragmentContainerView, "restaurants")
}
}
supportFragmentManager.executePendingTransactions()
restaurantsFragment.setModeReviewed()
unreviewedButton.isEnabled = true
reviewedButton.isEnabled = false
}
Meine Protokollierungsanweisungen und einige Debugging-Anweisungen deuten darauf hin, dass die Bindungen nach dem Aufruf von replace immer noch Werte in onViewCreated haben, diese Werte jedoch zu verlieren scheinen und bei der Transaktion zu Nullen werden ist fertig und restaurantsFragment.setModeReviewed() wird im onClickListener der Schaltfläche aufgerufen.
Die onCreateView-Funktion meines Fragments sieht folgendermaßen aus:
Code: Select all
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
Log.d("UnreviewedFragment", "onCreateView")
// set view bindings
// TODO try resetting with simple findviewbyid to see if binding null exception leaves
_binding = FragmentUnreviewedBinding.inflate(layoutInflater)
Log.d("UnreviewedFragment", "binding is: $_binding")
Log.d("UnreviewedFragment", "Inflated! Viewmodel: $viewModel")
reviewedAdapter = ReviewedItemAdapter()
unReviewedAdapter = UnreviewedItemAdapter()
binding.unreviewedRecyclerView.adapter = unReviewedAdapter
binding.unreviewedRecyclerView.layoutManager = LinearLayoutManager(activity?.applicationContext!!)
viewModel.restaurantList.observe(viewLifecycleOwner, Observer { restaurants ->
restaurants?.let { unReviewedAdapter.setRestaurants(it) }
restaurants?.let { reviewedAdapter.setRestaurants(it) }
})
val view = binding.root
return view
}
Code: Select all
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
_binding = FragmentEditItemBinding.inflate(layoutInflater)
// set up listeners
binding.submitButton.setOnClickListener {
viewModel.insert(Restaurant(
binding.restaurantNameEdit.text.toString(),
binding.restaurantAddressEdit.text.toString(),
binding.restaurantWebsiteEdit.text.toString(),
"dragon_hotpot_outside", // TODO fix this later
binding.priceBar.rating.toInt(),
null,
Date(),
null
))
}
val view: View = binding.root
return view
}
Mobile version