我有一个带有一些可变状态列表的组件。我将其中的一个项目以及删除该项目的回调传递给另一个组件。
@Composable
fun MyApp() {
val myItems = mutableStateListOf("1", "2", "3")
LazyColumn {
items(myItems) { item ->
MyComponent(item) { toDel -> myItems.remove(toDel) }
}
}
}
Run Code Online (Sandbox Code Playgroud)
该组件delete在clickable修饰符中调用回调。
@Composable
fun MyComponent(item: String, delete: (String) -> Unit = {}) {
Column {
Box(
Modifier
.size(200.dp)
.background(MaterialTheme.colors.primary)
.clickable { delete(item) }
) {
Text(item, fontSize = 40.sp)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用。但是当我更改clickable我自己的修饰符时pointerInput(),就会出现问题。
fun Modifier.myClickable(delete: () -> Unit) =
pointerInput(Unit) {
awaitPointerEventScope { awaitFirstDown() }
delete()
} …Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-list
这个问题以前已经被问过,但以不同的形式,关于一些特定的用例,到目前为止还没有答案。我终于让它工作了,所以我在这里分享这个,但是这不应该被标记为重复,因为前面的所有问题都指定了特定的东西,比如Columnswith scrollable Modifiers, or LazyRows,但这将解决一般的所有问题,我的意思是所有惰性滚动器,甚至希望甚至是可滚动的容器。我将发布答案,这只是我希望与社区分享的一段知识,当然,欢迎任何改进。
android state android-jetpack-compose android-jetpack-compose-list android-jetpack-compose-modifier
这是我的问题;
我怎样才能解决这个问题 ?我知道这不是一个大问题,但想象一下我们这里有一个可滚动的列,并且我们正在尝试将 ScrollState.value 传递给我的文本组件。由于这种情况,我们的列表变得如此滞后。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Screen()
}
}
}
@Composable
fun Screen(){
var counter by remember {
mutableStateOf(0)
}
Log.i("RECOMPOSE","VALUE1")
Column() {
Text(text = "Just a text")
Log.i("RECOMPOSE","VALUE2")
Button(onClick = { counter = counter.plus(1) }) {
Text(text = counter.toString())
Log.i("RECOMPOSE","VALUE3")
}
MyText(counter)
}
}
@Composable
fun MyText(counter:Int){
Text(text = counter.toString())
}
Run Code Online (Sandbox Code Playgroud)
编辑 滚动列存在主要问题;
@Composable
fun Screen(){
val scrollState …Run Code Online (Sandbox Code Playgroud) android android-studio android-jetpack-compose android-jetpack-compose-list compose-recomposition
我目前正在尝试 Android Jetpack Compose,并希望RecyclerView使用LazyColumn. 但是,当在用户滚动期间或在另一个编程滚动(动画)期间以编程方式滚动(动画)到某个项目时,不会呈现列表中的某些项目。这是 Compose 的问题还是我错误地实现了滚动?
作为一个简单的例子,可以使用以下代码:
class MainActivity : ComponentActivity() {
@ExperimentalTime
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val listState = rememberLazyListState()
rememberCoroutineScope().launch {
delay(10.seconds)
listState.animateScrollToItem(1000)
delay(100.milliseconds)
listState.animateScrollToItem(0)
}
LazyColumn(
state = listState,
contentPadding = PaddingValues(1.dp),
) {
items(1000) {
Text(
text = "$it",
modifier = Modifier
.padding(2.dp)
.clip(MaterialTheme.shapes.small)
.background(MaterialTheme.colors.onSurface)
.padding(8.dp)
.fillMaxWidth(),
color = MaterialTheme.colors.surface,
textAlign = TextAlign.Center,
)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还录制了该应用程序的示例视频: https: //i.imgur.com/dKFn1VH.mp4。
android android-jetpack android-jetpack-compose android-jetpack-compose-list
里面有items() {}章节LazyColumn。所以我想在每个部分周围画一个带有圆角的边框。有什么方法吗?
// need to draw a border around the items
LazyColumn {
items(10) {
Row {
// content
}
}
items(5) {
Row {
// content
}
}
}
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-list android-jetpack-compose-lazy-column