我有一个包含多个< code>LazyRow的< code>LazyColumn。在旧术语中,嵌套RecyclerView。
我的问题是,当移动到一个新的可组合(不同的选项卡)时,LazyCol列
不会恢复滚动状态。但是内部LazyRow
s恢复它们的状态。
例如,打开主屏幕,滚动到底部,然后滚动LazyRow
结束,然后打开不同的选项卡并再次返回主选项卡。LazyCol(不恢复状态)从顶部开始,但最后一个
LazyRow
恢复其滚动状态。
包含
LazyColumn 的主
屏幕
@Composable
fun HomeScreen(
homeViewModel: HomeViewModel = hiltViewModel()
) {
val scrollState = rememberLazyListState()
LazyColumn(contentPadding = PaddingValues(vertical = 8.dp),
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.spacedBy(8.dp),
state = scrollState,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
) {
items(5) {
TopRatedProducts(homeViewModel = homeViewModel)
}
}
}
对包含< code>LazyRow
的产品进行评级
@Composable
fun TopRatedProducts(
homeViewModel: HomeViewModel = hiltViewModel()
) {
val topRatedProducts by rememberFlowWithLifecycle(homeViewModel.topRatedProducts)
.collectAsState(initial = emptyList())
LazyRow(
contentPadding = PaddingValues(horizontal = 8.dp), // Space between start and end
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp), // Space between items
modifier = Modifier
.background(Color.Green)
) {
items(topRatedProducts) {
ProductCardItem(item = it)
}
}
}
如何恢复懒散列
滚动状态?
在<code>主屏幕()函数的末尾尝试以下操作:
LaunchedEffect(scrollState.firstVisibleItemScrollOffset) {
scrollState.scrollToItem(
scrollState.firstVisibleItemIndex,
scrollState.firstVisibleItemScrollOffset
)
}
当您希望在片段中使用ComposeView时,应该提到ViewCompositionStrategy。
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return ComposeView(requireContext()).apply {
// Dispose the Composition when viewLifecycleOwner is destroyed
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnLifecycleDestroyed(viewLifecycleOwner)
)
setContent {
// content
}
}
}
来自文档:默认情况下,每当视图与窗口分离时,Compose 都会释放合成。ComposeView 和 AbstractComposeView 等“编写 UI 视图”类型使用定义此行为的 ViewCompositionStrategy。
默认情况下,Compose使用DisposeOnDetachedFromWindow策略。但是,在某些情况下,当在以下情况中使用撰写UI视图类型时,可能不需要此默认值:
> 片段。组合必须遵循片段的视图生命周期,以便组合UI视图类型来保存状态。
过渡。只要将Compose UI视图用作转换的一部分,它就会在转换开始时而不是转换结束时从其窗口分离,从而使您的composable在其仍在屏幕上时处理其状态。
RecyclerView 视图持有者,或您自己的生命周期管理的自定义视图
文档链接: https://developer.android.com/jetpack/compose/interop/interop-apis#composition-strategy
如何从下方显示惰性列?默认情况下,它显示上面的列表
我是jetpack compose的新手,从< code>JetpackCompose基础代码中学习它,所以我在创建一个高性能的懒惰列表中找到了它 注意:LazyColumn不会像那样回收其子项。当您滚动浏览它时,它会发出新的,并且仍然具有高性能,因为与实例化Android视图相比,发出相对便宜。 因此,发出新的可组合项是多么的便宜和高效,那么为什么不使用列并一次性组合整个列表,而不是在滚动时不断
几天来,我一直试图成功地构建我正在进行的项目(使用Jetpack Compose),但当我更新gradle构建插件和其他一些依赖项时,我无法正确运行该项目。有一些gradle版本与dagger-hilt依赖项冲突,我不知道如何修复它。我正在使用Android Studio的金丝雀测试版。 这里还有我所有的gradle构建文件: Gradle构建模块应用程序: Gradle构建(项目层级): 错误:
我想知道什么是喷气背包中的脚手架组成一个BottomAppBar示例任何人都可以帮我
可以在Jetpack Compose中进行权重吗?例如,我想以这样一种方式设置它,即一个项目被加权为布局的1/3,而另一个占剩余的2/3。 在XML/ViewGroup样式中,可以使用LinearLayouts和ConstraintLayouts来实现这一点。然而,令我沮丧的是,使用Jetpack Compose似乎是不可能的。 示例: 在ConstraintLayout中,这是按如下方式完成的:
我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?