Currently only the outerList trigger recomposition. How to have recomposition triggered when a string in the innetList is changed/added as well?
Code-
private var data by mutableStateOf<List<List<StringObject>>>( // Use mut // Initialize with some sample data (20 rows, 10 columns) List(20) { outerIndex -> List(10) { innerIndex -> val value = "Value ${outerIndex * 10 + innerIndex + 1}" val imageUrl = if (innerIndex % 2 == 0) "https://example.com/image${innerIndex + 1}.jpg" else null StringObject(value, imageUrl) } as List<StringObject> // Cast to List< } )
Tried this, Instead of
mutableStateOf<List<List<StringObject>>>
Tried
mutableStateOf<List<MutableList<StringObject>>>
But this makes the app crashes due to concurrent modification¿ im new to compose and honestly it sucks due to all these immutabale and state stuff. New langauges should manage these stuff themseves internally .
FATAL EXCEPTION: main Process: com.example.composetablee, PID: 27955 java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1029) at java.util.ArrayList$Itr.next(ArrayList.java:982) at com.example.composetablee.MainActivity.addColumn(MainActivity.kt:143) at com.example.composetablee.MainActivity.access$addColumn(MainActivity.kt:28) at com.example.composetablee.MainActivity$onCreate$1$1$1$1$1$1$1.invoke(MainActivity.kt:51) at com.example.composetablee.MainActivity$onCreate$1$1$1$1$1$1$1.invoke(MainActivity.kt:51) at androidx.compose.foundation.ClickableKt$clickable$4$gesture$1$1$2.invoke-k-4lQ0M(Clickable.kt:167) at androidx.compose.foundation.ClickableKt$clickable$4$gesture$1$1$2.invoke(Clickable.kt:156) at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178) at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166) at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397) at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431) at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420) at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328) at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:566) at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.dispatchPointerEvent(SuspendingPointerInputFilter.kt:456) at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:469) at androidx.compose.ui.node.BackwardsCompatNode.onPointerEvent-H0pRuoY(BackwardsCompatNode.kt:374) at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:314) at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:301) at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:301) at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:183) at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:102) at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:98) at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1361) at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1307) at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1246) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3324) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3324) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3324) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3324) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2998) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:776) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1967) at android.app.Activity.dispatchTouchEvent(Activity.java:4522) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:734) at android.view.View.dispatchPointerEvent(View.java:16476) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:8490)
One additinal thing, if i add the horizontalScrolling modifier in lazyColumn, vertical scroll feels slightlyy slower than when Horizontalscrolling modifier was not added. Any idea Why this happends?
And lastly, how to deal with immutableList? Since it wont let me add stuff in it. Making a mutable copy seems resource costly especially if one have a big sized list of list data.
Thanks in advance
user152626 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.