У меня есть приложение, состоящее из одного MainActivity и нескольких фрагментов, с которыми взаимодействуют некоторые ImageButtons в этом действии. В одном фрагменте(UnreviewedFragment), у меня есть RecyclerView, адаптер которого можно изменить для отображения различной информации. Это прекрасно работает при первой загрузке этого фрагмента.
Однако, когда я вхожу в EditFragment, используя следующий код в MainActivity.kt:
addButton.setOnClickListener {
supportFragmentManager.commit {
replace(R.id.fragmentContainerView, "edit")
}
reviewedButton.isEnabled = true
unreviewedButton.isEnabled = true
}
А затем вернитесь к любому представлению с помощью следующего кода:
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
}
Привязка, используемая в методах setModeReviewed и setModeUnreviewed в UnreviewedFragment, внезапно становится нулевой.
Мои операторы ведения журнала и некоторая отладка показывают, что после вызова replace привязки все еще имеют значения в onViewCreated, но, похоже, они теряют эти значения и становятся нулевыми при транзакции завершается, и в onClickListener кнопки вызывается RestaurantFragment.setModeReviewed().
Функция onCreateView моего фрагмента выглядит следующим образом:
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
}
А код выхода из EditItemFragment выглядит следующим образом:
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
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... rning-from
Kotlin View Binding становится нулевым вне методов жизненного цикла при возврате из фрагмента ⇐ Android
Форум для тех, кто программирует под Android
1761136552
Anonymous
У меня есть приложение, состоящее из одного MainActivity и нескольких фрагментов, с которыми взаимодействуют некоторые ImageButtons в этом действии. В одном фрагменте(UnreviewedFragment), у меня есть RecyclerView, адаптер которого можно изменить для отображения различной информации. Это прекрасно работает при первой загрузке этого фрагмента.
Однако, когда я вхожу в EditFragment, используя следующий код в MainActivity.kt:
addButton.setOnClickListener {
supportFragmentManager.commit {
replace(R.id.fragmentContainerView, "edit")
}
reviewedButton.isEnabled = true
unreviewedButton.isEnabled = true
}
А затем вернитесь к любому представлению с помощью следующего кода:
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
}
Привязка, используемая в методах setModeReviewed и setModeUnreviewed в UnreviewedFragment, внезапно становится нулевой.
Мои операторы ведения журнала и некоторая отладка показывают, что после вызова replace привязки все еще имеют значения в onViewCreated, но, похоже, они теряют эти значения и становятся нулевыми при транзакции завершается, и в onClickListener кнопки вызывается RestaurantFragment.setModeReviewed().
Функция onCreateView моего фрагмента выглядит следующим образом:
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
}
А код выхода из EditItemFragment выглядит следующим образом:
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79796712/kotlin-view-binding-becomes-null-outside-liifecycle-methods-when-returning-from[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия