提问人:Ipshita Sardar 提问时间:9/25/2023 更新时间:9/25/2023 访问量:10
在 Kotlin 中为 PagingDataAdapter 的 RecycleView 创建多布局视图容器
create a multiple layout viewholder for recycleview in kotlin for PagingDataAdapter
问:
我正在开发一个聊天应用程序,我需要一个回收视图来夸大多种布局类型。在 kotlin 中,我无法使用 PagingDataAdapter 实现这一点。主要是我为实时数据使用空间 PagingDataAdapter<Chats、ViewHolder>(diffCallback, mainDispatcher) 像这样我正在初始化适配器,它接受 holder 的实例,那么我该如何满足我的要求
请查看我的基本代码
class MessageNewAdapter(
diffCallback: DiffUtil.ItemCallback<Chats>,
mainDispatcher: CoroutineDispatcher,
var activity: Activity,
var context: Context,
var userVewModel: UserVewModel,
var handler: Handler,
var message_view_model: Message_View_Model,
var recycler: RecyclerView,
var myId: String = PrefUtill.getUser()?.user?.id ?: ""
) : PagingDataAdapter<Chats, ViewHolder>(diffCallback, mainDispatcher) {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
}
override fun getItemViewType(position: Int): Int {
return position
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val item = getItem(viewType)
var sender = false;
val res: Int = when {
item != null -> {
if (item.sender.equals(myId, ignoreCase = true)) {
sender = true
when (item.type) {
"T" -> if (!item.replay_of.equals("null", ignoreCase = true) &&
!item.replay_of.equals("", ignoreCase = true)
) {
R.layout.chat_right_m
} else {
R.layout.chat_right_t
}
"I" -> if (!item.replay_of.equals("null", ignoreCase = true) &&
!item.replay_of.equals("", ignoreCase = true)
) {
R.layout.chat_right_m
} else {
R.layout.chat_right_i
}
else -> R.layout.chat_right_m
}
} else {
sender = false
when (item.type) {
"T" -> if (!item.replay_of.equals("null", ignoreCase = true) &&
!item.replay_of.equals("", ignoreCase = true)
) {
R.layout.chat_left_m
} else {
R.layout.chat_left_t
}
"I" -> if (!item.replay_of.equals("null", ignoreCase = true) &&
!item.replay_of.equals("", ignoreCase = true)
) {
R.layout.chat_left_m
} else {
R.layout.chat_left_i
}
else -> R.layout.chat_left_m
}
}
}
else -> R.layout.chat_shimmer
}
val view = LayoutInflater.from(activity).inflate(res, parent, false)
val hol = ViewHolder(view, sender)
return hol;
}
class ViewHolder(itemView: View, sender: Boolean) : RecyclerView.ViewHolder(itemView) {
init {
val binding = if (sender) {
ChatRightMBinding.bind(itemView)
} else {
ChatLeftMBinding.bind(itemView)
}
}
}
}
答: 暂无答案
评论