我使用 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) 我正在将多活动应用程序迁移到单活动应用程序以进行撰写。
我创建了一个可组合的主页,其中包含一个顶部应用程序栏,其标题如下所示:
@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) 我正在使用 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)
我确实知道我可以使用提升卡代替卡,但提升卡也存在同样的问题。
另外,这是一个特殊情况,所以我手动应用颜色
我有这样的场景,其中用户单击可组合A中的按钮,然后从可组合B的列表中选择一个项目,并从可组合C的列表中选择另一个项目。
我的问题是,当我从屏幕C选择一个项目时,我想使用我在B和C中选择的内容导航回屏幕A。但是当给出参数时 popBackStack 不起作用。
这是代码,
navController.popBackStack(route = Screen.SelectPlan.route + "?regionId=${region.id}&operatorId=${operator.id}")
Run Code Online (Sandbox Code Playgroud)
现在,我看到 popBackStack 确实采用了路由参数,但将其转换为哈希码以向后导航,而不是创建类似 Uri 的导航函数。
我正在尝试构建以下组件,
以下是我的代码,
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
我正在从多个活动撰写项目迁移到单个活动撰写项目。
迁移时,我发现我在多个屏幕中使用共享首选项(现在可组合功能)
将共享首选项对象作为参数传递给每个可组合项似乎很乏味,有没有更好的方法可以做到这一点?
我创建了一个基准测试模块,并在其 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) 我正在使用 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)
我想要实现的目标:
我想应用它一次,不需要像其他组件一样显式指定它
我在实时数据的开头获取了包含新项的新列表,然后使用其数据更新适配器
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
失败我的意思是它为不同的双精度组提供了重复的值。三个双精度是顶点的 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) android ×10
material3 ×2
android-architecture-components ×1
android-jetpack-compose-button ×1
c++ ×1
gradle ×1
kotlin ×1