【问题标题】:How to initialize adapter with pojo class instead of list?如何用 pojo 类而不是列表初始化适配器?
【发布时间】:2021-05-01 10:29:16
【问题描述】:

您好,我正在使用 kotlin 学习新的 android jetpack。在使用带有绑定的 recyclerview 时,我们需要使用空列表初始化适配器,大多数时候我看到人们将列表传递给适配器。但是如何使用嵌套的 pojo 类而不是列表来做同样的事情呢?

这是数据样本

{"results":[{"gender":"female","name":{"title":"Ms","first":"Ines","last":"Hernandez"},"location ":{"street":{"number":1495,"name":"Calle de Alcalá"},"city":"Málaga","state":"Melilla","country":"Spain","邮政编码":86664,"坐标":{"纬度":"-17.4716","经度":"106.6687"},"时区":{"偏移":"-5:00","描述":"东部时间(美国和加拿大),波哥大,利马"}},"email":"ines.hernandez@example.com","login":{"uuid":"66c3248d-d257-45b1-bd9c-3ebcba6e7b7a","用户名 “:” smallduck939" , “密码”: “maxxxx”, “盐”: “kxEtQgmY”, “MD5”: “14e95cbbda70d692f74c5073a21b6a1e”, “SHA1”: “bf12732af070dd38e6418b31260ba10f74f14e94”, “SHA256”: “7f1b6be17c0bf339d6153c7c4379fd0d8564bf0cfa2f9e6ae9caef2a037f7e0a”},“DOB ":{"日期":"1982-04-07T17:51:39.317Z","年龄":39},"注册":{"日期":"2016-02-20T17:10:42.682Z","年龄":5},"电话":"964-947-469","手机":"677-793-075","id":{"name":"DNI","value":"96170049- S"},"图片":{"大":"https://randomuser.me/api/portraits/women/66.jpg","中":"https://randomuser.me/api/portrait s/med/women/66.jpg","thumbnail":"https://randomuser.me/api/portraits/thumb/women/66.jpg"},"nat":"ES"}]}

这是我的数据类

data class UserResponse(val results:ArrayList<User>?)

以及后续的,所以你可以看到我已经用“结果”键开始了起点。

现在在声明适配器时,我需要传递一个类似的列表

 private val listAdapter = UserAdapter(arrayListOf())

然后声明类似

//来自另一个项目

private val ListDataObserver = Observer<List<Animal>> {list-> list?.let { binding.animalList.visibility=View.VISIBLE
listAdapter.updateanimalList(it)}}

但是你可以在现有数据中看到数据是Single类型的,即以一个键开头,那么在这种情况下我该如何初始化recyclerview

private val listAdapter = UserAdapter(arrayListOf())

因为数据类不是列表类型?我应该直接从这里解析吗?

[{"gender":"female","name":{"title":"Ms","first":"Ines","last":"Hernande

请帮我解决这个问题,因为我无法初始化 recyclerview 并随后使用 observable。 谢谢:)

【问题讨论】:

    标签: android kotlin android-jetpack


    【解决方案1】:

    您必须将相同的列表传递给您从观察者那里获得的适配器对象,请参见下面的代码

    private val listAdapter = UserAdapter(arrayListOf<Animal>())
    
    private val ListDataObserver = Observer< UserResponse> {userRes-> userRes?.let { binding.animalList.visibility=View.VISIBLE listAdapter.updateanimalList(it.result)}}
    

    注意:Animal 是您从 UserResponse 对象中的观察者那里获得的列表

    【讨论】:

    • 我从哪里得到这个对象 userResponse ?我什至需要初始化对吗?那么该怎么做呢?
    • 这里有一个问题是你在这个数据类 UserResponse(val results:ArrayList?) 中使用了用户的列表但是从观察者那里你得到了 Animal-> list private val ListDataObserver = Observer> {list-> list?.let { binding.animalList.visibility=View.VISIBLE listAdapter.updateanimalList(it)}} 请将其设为用户或动物,然后如果用户是您的列表 -> private val listAdapter = UserAdapter(arrayListOf()) if Animal and then if Animal is you list -> private val listAdapter = UserAdapter(arrayListOf())
    • 这只是另一个项目的一个例子,我还没有到达那里。
    • 这样您就可以将列表作为私有 val listAdapter = UserAdapter(arrayListOf()) 传递给适配器,animal 是一个列表,当您从观察者获取数据时,私有 val ListDataObserver = Observer {userRes-> userRes?.let { binding.animalList.visibility=View.VISIBLE listAdapter.updateanimalList(it.result)}}
    • 好的会尝试让你知道,并标记你的答案谢谢。
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2016-06-24
    相关资源
    最近更新 更多