将2个适配器设置为1个RecyclerView

问题描述 投票:-1回答:1

我在我的Android应用程序中制作了一个非常简单的ChatActivity。我只需要在我和用户之间传递简单的信息,不多也不少。

我知道我应该使用Firebase云消息传递,但我现在正在使用Firebase Cloud Firestore来发送和接收消息。

我想要做的是使用一个RecyclerView来显示我的消息和用户的消息。我已经制作了Adapters,但我已经将这两个适配器(其中一个适用于我,另一个适用于用户)设置为一个RecyclerView。我看到this问题,但我不明白,不知道如何使用它。

有人可以帮我这个吗?

android android-recyclerview android-adapter
1个回答
0
投票

您需要的是两个不同的布局,一个用于用户,一个用于您,但只有一个适配器,Recycler视图只能有一个。

你的适配器应该扩展RecyclerView.Adapter<RecyclerView.ViewHolder>,我们应该实现getItemViewType并在onCreateViewHolder内做一些工作,我们的适配器应采取这种形式

class BillAmountsHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {

/**
 * Set view with values available
 */
fun setValues (value: String?) {
    itemView.bill_amount_account_radio_button.text = value
}

两个持有人怎么样?想象一下,你有一个对象,然后是一个列表,可能一个解决方案可以是NestedScrollView,但如果这是重复的,也许你有一个简单的对象,然后是一个字符串列表,然后是另一个对象,最后是另一个列表。我们应该使用带有多个持有者的RecyclerView

我们的适配器应该扩展RecyclerView.Adapterand我们应该实现getItemViewType并在onCreateViewHolder中做一些工作,我们的适配器应该采用这种形式

class StoreAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var result: List<YOUR-COMPLEX-OBJECT>? = null

/**
 * Get item
 */
override fun getItemViewType(position: Int): Int {
    return position
}

/**
 * Create view depending of the type of the viewgroup
 * changing to have a header as a holder
 * @param parent ViewGroup
 * @param viewType Int type
 */
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return if (viewType == 0)
        StoreHeaderHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_stores_info, parent, false))
    else
        StoreHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_use_place, parent, false))
}

/**
 * Initialize the holder StoreHolder
 */
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    if (position == 0) {
        val holderHeader = holder as StoreHeaderHolder
        holderHeader.setValues(infoListener)
    } else {
        val holderBody = holder as StoreHolder
        holderBody.setValues(result?.get(position - 1), distance)
    }
}

/**
 * Get size items
 */
override fun getItemCount(): Int {
    return if (result != null)
        result!!.size + 1
    else
        0
}
}

请检查以下链接:https://medium.com/knowing-android/recyclerview-with-two-holders-320fc83759c0对于Java实现,您可以在此处找到它:https://gist.github.com/dinorahtovar/bfc8bf3b41f70838beaa5d9089b6bda9#file-recyclerview-recyclerviewadapter-y-recyclerviewholder

© www.soinside.com 2019 - 2024. All rights reserved.