From 01a3838c6a5e98f6d8560a3370fbd8b284ac5ac9 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Mon, 14 Apr 2025 17:34:08 +0530 Subject: [PATCH] Fixed: UI was not updating when selecting items for deletion. --- .../kiwix/kiwixmobile/core/page/PageFragment.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt index 63067c2f2..bcb4149ff 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt @@ -144,15 +144,6 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv val activity = requireActivity() as CoreMainActivity compositeDisposable.add(pageViewModel.effects.subscribe { it.invokeWith(activity) }) pageViewModel.state.observe(viewLifecycleOwner, Observer(::render)) - - // // hides keyboard when scrolled - // fragmentPageBinding?.recyclerView?.addOnScrollListener( - // SimpleRecyclerViewScrollListener { _, newState -> - // if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { - // fragmentPageBinding?.recyclerView?.closeKeyboard() - // } - // } - // ) } override fun onCreateView( @@ -266,6 +257,13 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv private fun render(state: PageState<*>) { pageScreenState.value = pageScreenState.value.copy( switchIsEnabled = !state.isInSelectionState, + // First, assign the existing state to force Compose to recognize a change. + // This helps when internal properties of items (like `isSelected`) change, + // but the list reference itself remains the same — Compose won't detect it otherwise. + pageState = pageState.value + ) + // Then, assign the actual updated state to trigger full recomposition. + pageScreenState.value = pageScreenState.value.copy( pageState = state ) if (state.isInSelectionState) {