标签: android-jetpack-compose-list

为什么有时需要在列表中使用 key() ?

我有一个带有一些可变状态列表的组件。我将其中的一个项目以及删除该项目的回调传递给另一个组件。

@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)

该组件deleteclickable修饰符中调用回调。

@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

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

将两个惰性滚动条一起滚动

这个问题以前已经被问过,但以不同的形式,关于一些特定的用例,到目前为止还没有答案。我终于让它工作了,所以我在这里分享这个,但是这不应该被标记为重复,因为前面的所有问题都指定了特定的东西,比如Columnswith scrollable Modifiers, or LazyRows,但这将解决一般的所有问题,我的意思是所有惰性滚动器,甚至希望甚至是可滚动的容器。我将发布答案,这只是我希望与社区分享的一段知识,当然,欢迎任何改进。

android state android-jetpack-compose android-jetpack-compose-list android-jetpack-compose-modifier

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

Jetpack Compose 重构每个状态变化

这是我的问题;

  • 当我在屏幕中添加 MyText 可组合项时,我会看到所有日志(value1、value2、value3),这意味着它正在重新组合代码的每个部分。
  • 但是,当我评论 MyText 行时,我在 Logcat 上只看到 value3

我怎样才能解决这个问题 ?我知道这不是一个大问题,但想象一下我们这里有一个可滚动的列,并且我们正在尝试将 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

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

Jetpack Compose:如果动画滚动中断并开始新的滚动,LazyColumn 不会渲染某些项目

我目前正在尝试 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

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

如何在 Android Compose 中围绕 LazyColumn 项绘制边框

里面有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

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