Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Compose Jetpack中创建回收器视图?_Android_Android Recyclerview_Android Jetpack Compose_Android Jetpack Compose List_Android Compose Lazyfor - Fatal编程技术网

Android 如何在Compose Jetpack中创建回收器视图?

Android 如何在Compose Jetpack中创建回收器视图?,android,android-recyclerview,android-jetpack-compose,android-jetpack-compose-list,android-compose-lazyfor,Android,Android Recyclerview,Android Jetpack Compose,Android Jetpack Compose List,Android Compose Lazyfor,在Compose Jetpack中是否有创建recyclerView的特殊方法?或者与往常一样?在jetnews列表/recyclerview的示例项目中,他们将垂直滚动条与列一起使用,并使用forEach填充@Composable函数下面的项 @Composable private fun TabWithTopics(tabname: String, topics: List<String>) { VerticalScroller { Column {

在Compose Jetpack中是否有创建recyclerView的特殊方法?或者与往常一样?

jetnews
列表/recyclerview的示例项目中,他们将
垂直滚动条
一起使用,并使用
forEach
填充
@Composable
函数下面的项

@Composable
private fun TabWithTopics(tabname: String, topics: List<String>) {
    VerticalScroller {
        Column {
            HeightSpacer(16.dp)
            topics.forEach { topic ->
                TopicItem(
                    getTopicKey(
                        tabname,
                        "- ",
                        topic
                    ), topic
                )
                TopicDivider()
            }
        }
    }
} 
  • 对于垂直列表
  • 水平列表

  • 希望对您有所帮助。

    JetNews应用程序中的示例包含静态数据。值得一提的是,根据(尤其是1830),我们应该考虑<代码> ScRultListEng/Cuth>,它是针对具有不确定数量的元素的列表(例如从Web下载的),传统上由<代码> CurryReVIEW < /代码>处理。然后,它应该是这样的:

    @Composable
    fun NewsFeed(stories: List<StoryData>) {
      ScrollingList(stories) { story ->
        StoryWidget(story)
      }
    }
    
    在这种情况下,我们在迭代的每个步骤中都使用了
    StoryWidget
    (或我们选择的任何其他小部件),数据通过lambda表达式动态发出。

    有一个新版本:

    @Composable
    fun <T> AdapterList(
     data: List<T>,
     modifier: Modifier = Modifier.None,
      itemCallback: @Composable() (T) -> Unit
    )
    
    @Composable
     fun Scrollable(
    dragDirection: DragDirection,
    scrollableState: ScrollableState,
    onScrollStarted: (startedPosition: PxPosition) -> Unit = {},
    onScrollStopped: (velocity: Float) -> Unit = {},
    enabled: Boolean = true,
    children: @Composable() () -> Unit
    )
    
     AdapterList(
        data = (1..20).map { it }.toList()
    ) {
        if (it % 2 == 0) {
            Text("$it Even", style = TextStyle(fontSize = 40.sp, color = 
      Color.Gray))
        } else {
            Text(text = "$it Odd", style = TextStyle(fontSize = 70.sp))
        }
    }
    
    @Composable
    有趣的改编者(
    数据:列表,
    修饰符:修饰符=修饰符。无,
    itemCallback:@Composable()(T)->Unit
    )
    @组合的
    有趣的滚动(
    拖动方向:拖动方向,
    scrollableState:scrollableState,
    onScrollStarted:(startedPosition:PxPosition)->Unit={},
    onScrollStopped:(速度:浮点)->Unit={},
    已启用:布尔值=真,
    子项:@Composable()()->Unit
    )
    适配器列表(
    data=(1..20).map{it}.toList()
    ) {
    如果(它%2==0){
    Text($it偶数),style=TextStyle(fontSize=40.sp,颜色=
    颜色(灰色)
    }否则{
    Text(Text=“$it Odd”,style=TextStyle(fontSize=70.sp))
    }
    }
    
    更新了,当前在dev06 Jetpack Compose的实现使用了
    适配器列表
    ,您可以使用中包含的简单示例,我可以分享一个更复杂的示例(实际场景使用):


    • 您的
      列表

      这是一个示例代码,它使用AdapterList在compose中实现recylcerview

      @Composable
      fun Feeds(feeds:LiveData<List<Feed>>) {
          val mFeeds by feeds.observeAsState(emptyList())
          AdapterList(data = feeds){feed->
          FeedsItem(feed)
          }
      }
      
      @Composable
      趣味提要(提要:LiveData){
      val mFeeds by feed.observeastate(emptyList())
      适配器列表(数据=源){feed->
      FeedsItem(feed)
      }
      }
      
      新来者的进一步更新。从0.1.0-dev14开始,
      AdapterList
      被弃用,取而代之的是
      LazyColumnItems
      LazyRowItems

      于2021年3月更新:从
      1.0.0-beta01开始

      • 对于垂直列表
      • 水平列表
      例如:

      @Composable
      有趣的懒汉{
      懒汉{
      项目((1..1000).toList()){
      Text(Text=“Item$it”)
      }
      }
      }
      

      先前的答复供参考: 使用
      1.0.0-alpha01
      可以使用:

      • 对于垂直列表
      • 用于横向列表
      比如:

      @Composable
      fun LazyRowItemsDemo() {
          LazyRowFor(items = (1..1000).toList()) {
              Text(text = "Item $it")
          }
      }
      

      ScrollingList
      元素在哪里?我正在尝试使用它,但在IDE中找不到它。@LucasSousa你说得对<代码>滚动列表
      不是元素。我在谷歌上搜索,发现
      滚动列表
      现在不可用。它将在下一版本中提供。所以,我们必须等待。(发现)是的。回收怎么办您针对dev.14的解决方案是否有一种方法可以像使用
      ScrollableColumn(ReverseSrollDirection=true)
      一样反转
      LazyColumnFor
      fun addLogic(modelList: ModelList<MyModel>) {
        modelList.add(MyModel("Smith John", 10))
      }
      
      class MyModel(var name: String, var index: Int)
      
      @Composable
      fun RecycledList() { // Any name you want
        val modelList<MyModel> = modelListOf()
        var counter = 0
      
        addLogic(modelList)
      
        modelList.add(MyModel("John Doe", 99))
      
        MaterialTheme {
          Column {
            Container(height = 70.dp) {
               Align(alignment = Alignment.Center) {
                  Button(onClick = { 
                     modelList.add(MyModel("John Smith", counter++))
                     // Any other logic you want
                  }) {
                     Text("ADD ITEM")
                  }
               }
            }
            AdapterList(data = modelList) { item ->
               Center {
                  Text("Hello ${item.name} - Index: ${item.index}")
               }
            },
          }
        }
      }
      
      @Composable
      fun Feeds(feeds:LiveData<List<Feed>>) {
          val mFeeds by feeds.observeAsState(emptyList())
          AdapterList(data = feeds){feed->
          FeedsItem(feed)
          }
      }
      
      @Composable
      fun LazyRowItemsDemo() {
          LazyRowFor(items = (1..1000).toList()) {
              Text(text = "Item $it")
          }
      }