我在我的Android应用程序中制作了一个非常简单的ChatActivity
。我只需要在我和用户之间传递简单的信息,不多也不少。
我知道我应该使用Firebase云消息传递,但我现在正在使用Firebase Cloud Firestore来发送和接收消息。
我想要做的是使用一个RecyclerView
来显示我的消息和用户的消息。我已经制作了Adapters
,但我已经将这两个适配器(其中一个适用于我,另一个适用于用户)设置为一个RecyclerView。我看到this问题,但我不明白,不知道如何使用它。
有人可以帮我这个吗?
您需要的是两个不同的布局,一个用于用户,一个用于您,但只有一个适配器,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