2

我尝试将 groupie 适配器添加到我的回收器视图中,如下面的代码所示。但是,当我运行我的应用程序时,我收到一个编译器错误,说我的 reyclerview 不能为空(因为 kotlin 空安全功能)。我不知道为什么这个适配器不工作。

我知道问题出在这条线上:

recyclerview_newmessage.adapter = adapter

这是完整的代码

class NewMessageActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    supportActionBar?.title = "Select User"

    fetchUsers()
  }

  private fun fetchUsers() {
    val ref = FirebaseDatabase.getInstance().getReference("/users")
    ref.addListenerForSingleValueEvent(object: ValueEventListener {

        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {
            val adapter = GroupAdapter<ViewHolder>()
            p0.children.forEach {
                Log.d("NewMessage", it.toString())
                val user = it.getValue(User::class.java)

                if (user != null) {
                    adapter.add(UserItem(user))
                }
            }

            recyclerview_newmessage.adapter = adapter
        }

    })
  }
}

class UserItem(val user: User): Item<ViewHolder>() {

  override fun bind(viewHolder: ViewHolder, position: Int) {
    viewHolder.itemView.username_textview_new_message.text = user.username
  }

  override fun getLayout(): Int {
    return R.layout.user_row_new_message
  }
}

最终结果显示使用我的 firebase 数据库中的用户名显示回收器视图中的行。

4

1 回答 1

1

如果您recycler view在 xml 文件中定义,则需要添加它。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.ref_xml_file) . // add this line
    supportActionBar?.title = "Select User"

    fetchUsers()
  }

如果没有定义到 xml 文件中。

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var recyclerview_newmessage = RecyclerView(this)
        setContentView(recyclerview_newmessage) . // add this line
        supportActionBar?.title = "Select User"

        fetchUsers()
      }
于 2019-07-23T11:50:41.400 回答