小编nay*_*rde的帖子

java.lang.IllegalStateException:在 Jetpack compose 中滚动分页 Lazy 列时,LayoutNode 应附加到所有者

我使用 LazyColumn 和 Paging 3 来加载联系人,当我滚动列表时,它很慢,有时会抛出以下异常

java.lang.IllegalStateException: LayoutNode should be attached to an owner
        at androidx.compose.ui.node.LayoutNodeKt.requireOwner(LayoutNode.kt:1407)
        at androidx.compose.ui.node.ModifierLocalConsumerNode.notifyConsumerOfChanges(ModifierLocalConsumerNode.kt:42)
Run Code Online (Sandbox Code Playgroud)

以下是 LazyColumn 的代码:

val contactsFlow= viewModel.fetchContacts(context)
val lazyContacts = contactsFlow.collectAsLazyPagingItems()
    LazyColumn(
        modifier = Modifier.padding(top = 8.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)) {
        items(lazyContacts) { contact ->
            if(contact != null)
            {
                Contact(contact = contact, onContactClick = {
                    viewModel.addMemberFrom(it) { member ->
                        onContactClick(member)
                    }
                })
            }
        }
    }

Run Code Online (Sandbox Code Playgroud)

这是视图模型代码:

java.lang.IllegalStateException: LayoutNode should be attached to an owner
        at androidx.compose.ui.node.LayoutNodeKt.requireOwner(LayoutNode.kt:1407)
        at androidx.compose.ui.node.ModifierLocalConsumerNode.notifyConsumerOfChanges(ModifierLocalConsumerNode.kt:42)
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

11
推荐指数
1
解决办法
4585
查看次数

使用 jetpack 撰写导航中的 popBackStack 时如何更改脚手架顶部栏的标题?

我正在将多活动应用程序迁移到单活动应用程序以进行撰写。

我创建了一个可组合的主页,其中包含一个顶部应用程序栏,其标题如下所示:


@Composable
fun Home() {
val navController = rememberNavController()
    var actionBarTitle by rememberSaveable { mutableStateOf("Home") }
    var actionBarSubtitle by rememberSaveable { mutableStateOf("") }
    Scaffold(topBar = {
        Header(title = actionBarTitle, subTitle = actionBarSubtitle,
                onBackPress = { navController.popBackStack() },
            showInfo = true, onActionClick = {
                navController.navigate(Screen.Info.route)
            }, modifier = Modifier.fillMaxWidth())
    }) {
        AppNavigation(navController = navController, onNavigate = { title, subtitle ->
                actionBarTitle = title
                actionBarSubtitle = subtitle
            })
}


Run Code Online (Sandbox Code Playgroud)

每当我对任何屏幕使用 navController.navigate 时,都会触发 onNavigate,如下所示:


onNavigate("Top up", "Please topm up with minimum of …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

10
推荐指数
2
解决办法
5688
查看次数

更改卡片高度即更改 Jetpack 中与 Material 3 组合的卡片颜色

我正在使用 Card 可组合项,我希望它的颜色为白色。

但是当我向它添加一些高度时,它会将颜色更改为更像primaryContainer 颜色。

我看过文档,其中有一些称为“elevationOverlay”的东西。但找不到说明如何使用它的示例。

这是我的代码:

Card(
      modifier = Modifier.padding(top = 16.dp),
      colors = CardDefaults.cardColors(containerColor = White),
      elevation = CardDefaults.cardElevation(defaultElevation = 2.dp)
) {
}
Run Code Online (Sandbox Code Playgroud)

我确实知道我可以使用提升卡代替卡,但提升卡也存在同样的问题。

另外,这是一个特殊情况,所以我手动应用颜色

android android-jetpack-compose material3

10
推荐指数
2
解决办法
4050
查看次数

Jetpack compose - 如何使用参数执行 popBackStack?

我有这样的场景,其中用户单击可组合A中的按钮,然后从可组合B的列表中选择一个项目,并从可组合C的列表中选择另一个项目。

我的问题是,当我从屏幕C选择一个项目时,我想使用我在BC中选择的内容导航回屏幕A。但是当给出参数时 popBackStack 不起作用。

这是代码,

navController.popBackStack(route = Screen.SelectPlan.route + "?regionId=${region.id}&operatorId=${operator.id}")
Run Code Online (Sandbox Code Playgroud)

现在,我看到 popBackStack 确实采用了路由参数,但将其转换为哈希码以向后导航,而不是创建类似 Uri 的导航函数。

android android-jetpack-compose

7
推荐指数
1
解决办法
4619
查看次数

如何在 Jetpack Compose 中对齐按钮内的不同元素?

我正在尝试构建以下组件,

在此输入图像描述

以下是我的代码,

Button(onClick = { /*TODO*/ }, modifier = Modifier.fillMaxWidth()) {
    Image(painter = painterResource(id = R.drawable.ic_check_circle) , contentDescription = "")
    Text(text = "John Doe", textAlign = TextAlign.Start)
    Image(painter = painterResource(id = R.drawable.ic_arrow_forward), contentDescription = "",
        alignment = Alignment.TopEnd)
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-compose-button android-jetpack-compose-button

6
推荐指数
2
解决办法
9148
查看次数

如何访问可组合函数中的共享首选项?

我正在从多个活动撰写项目迁移到单个活动撰写项目。

迁移时,我发现我在多个屏幕中使用共享首选项(现在可组合功能)

将共享首选项对象作为参数传递给每个可组合项似乎很乏味,有没有更好的方法可以做到这一点?

android android-jetpack-compose

6
推荐指数
1
解决办法
6690
查看次数

无法使用 Gradle 托管设备运行基线配置文件测试

我创建了一个基准测试模块,并在其 build.gradle 文件中添加了一个托管设备,如下所示:

testOptions {
        managedDevices {
            devices {
                pixel2api30 (com.android.build.api.dsl.ManagedVirtualDevice) {
                    device = "Pixel 2"
                    apiLevel = 30
                    systemImageSource = "aosp"
                    require64Bit = false
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

每当我运行命令时gradle :benchmark:pixel2api30Setup它就会工作

但是当我运行命令时gradle :benchmark:pixel2api30BenchmarkAndroidTest

它抛出以下错误:

Task 'pixel2api30BenchmarkAndroidTest' not found in project ':benchmark'.
Run Code Online (Sandbox Code Playgroud)

android gradle baseline-profile

5
推荐指数
1
解决办法
1174
查看次数

使用 Material design 3 时如何定义 Jetpack compose 中按钮的形状

我正在使用 Material design 3 和 Jetpack compose。

默认情况下,按钮形状的圆角半径为 full 类型,即 20dp。根据文档。 https://m3.material.io/components/buttons/overview

如果我查看形状文档,我可以在令牌部分看到以下形状 在此输入图像描述

但是,当我向应用程序的主题提供 Shapes 对象时。我没有自定义完整形状的选项。

这是我的代码

Shapes(
    extraSmall = RoundedCornerShape(4.dp),
    small = RoundedCornerShape(8.dp),
    medium = RoundedCornerShape(12.dp),
    large = RoundedCornerShape(16.dp),
    extraLarge = RoundedCornerShape(8.dp)
)
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

  1. 我不想为每个按钮显式指定形状或为按钮创建可组合项,然后在任何地方重复使用它。

我想应用它一次,不需要像其他组件一样显式指定它

android android-jetpack-compose material3

5
推荐指数
1
解决办法
2586
查看次数

在顶部添加新项后,Recycler视图未滚动到顶部,因为尚未对列表适配器进行更改

我在实时数据的开头获取了包含新项的新列表,然后使用其数据更新适配器

viewModel.myLiveData.observe { this, Observer { myList -> 
        adapter.submitList(myList) 
        recyclerView.scrollToPosition(0)
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-recyclerview android-architecture-components

2
推荐指数
2
解决办法
1574
查看次数

如何在jetpack compose中创建多行文本区域

我想创建以下文本字段。但互联网上没有相同的样本,材料文档中也没有 在此输入图像描述

android android-jetpack-compose

2
推荐指数
1
解决办法
1810
查看次数

我在 C++ 中使用 boost 散列函数将 3 个双打组合成一个面临冲突的散列

失败我的意思是它为不同的双精度组提供了重复的值。三个双精度是顶点的 x、y 和 z。我有一个顶点列表,并使用从双打创建的哈希作为地图中的键。我想知道是否存在针对此特定应用程序的更可靠的哈希组合函数。

  template <class T>
    inline void hash_combine(std::size_t& seed, T const& v)
    {
        seed ^= std::hash<T>()(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
    }
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
1469
查看次数