在 Kotlin 中为 PagingDataAdapter 的 RecycleView 创建多布局视图容器

create a multiple layout viewholder for recycleview in kotlin for PagingDataAdapter

提问人:Ipshita Sardar 提问时间:9/25/2023 更新时间:9/25/2023 访问量:10

问:

我正在开发一个聊天应用程序,我需要一个回收视图来夸大多种布局类型。在 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)
            }
        }

    }

}
Kotlin Android-RecyclerView 适配器

评论


答: 暂无答案