diff --git a/collect_app/src/main/java/org/odk/collect/android/formhierarchy/HierarchyListItemView.kt b/collect_app/src/main/java/org/odk/collect/android/formhierarchy/HierarchyListItemView.kt index 740950135ef..fe419609b83 100644 --- a/collect_app/src/main/java/org/odk/collect/android/formhierarchy/HierarchyListItemView.kt +++ b/collect_app/src/main/java/org/odk/collect/android/formhierarchy/HierarchyListItemView.kt @@ -3,19 +3,16 @@ package org.odk.collect.android.formhierarchy import android.content.Context import android.view.LayoutInflater import android.widget.FrameLayout -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Text +import androidx.compose.runtime.SideEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.platform.LocalView import com.google.android.material.textview.MaterialTextView import org.odk.collect.android.R import org.odk.collect.android.widgets.MediaWidgetAnswerViewModel import org.odk.collect.android.widgets.WidgetAnswer -import org.odk.collect.androidshared.R.dimen import org.odk.collect.androidshared.ui.ComposeThemeProvider.Companion.setContextThemedContent -import org.odk.collect.androidshared.ui.compose.marginSmall import org.odk.collect.androidshared.ui.compose.marginStandard class HierarchyListItemView(context: Context, layoutResId: Int) : FrameLayout(context) { @@ -31,6 +28,15 @@ class HierarchyListItemView(context: Context, layoutResId: Int) : FrameLayout(co findViewById(R.id.primary_text).text = item.primaryText if (item is HierarchyItem.Question) { findViewById(R.id.answer_view).setContextThemedContent { + val currentView = LocalView.current + + // A ComposeView reused from the RecyclerView pool gets measured to 0 height on + // rebind, so the row renders blank after scrolling. Nudge a remeasure after + // composition to apply the real height. + SideEffect { + currentView.requestLayout() + } + WidgetAnswer( modifier = Modifier.padding(top = marginStandard()), prompt = item.formEntryPrompt,