Прослушиватель Onclick в Recyclerview всплывающего окна

#android #kotlin #android-recyclerview

#Android #kotlin #android-recyclerview

Вопрос:

Я пытаюсь создать всплывающее окно, в котором пользователь может увидеть Recyclerview (Список комментариев). Но я хочу добавить в него 2 кнопки для увеличения и уменьшения голосов для комментариев.

Я завершил просмотр Recyclerview и его отображение должным образом, как я хочу, но я не могу добавить кнопки в recyclerview. Вот мой код.

Код всплывающего окна из моей активности:

 lateinit var  getAllcomment : GetAllCommentsAdapter
lateinit var upVote : View.OnClickListener
lateinit var downVote : View.OnClickListener

viewallcomments_txt.setOnClickListener {it->
            val layoutInflater = this@ViewSinglePostActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
            val customView = layoutInflater.inflate(R.layout.popup, null)
            val display = windowManager.defaultDisplay
            val size = Point()
            display.getSize(size)
            val popupWindow=PopupWindow(customView, size.x-50, size.y-660, true);
            popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
            popupWindow.setAnimationStyle(R.style.PopupAnimation)
            popupWindow.showAtLocation(linearLayout1, Gravity.CENTER, 0, 0)
            popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
            customView.popup_rcv.layoutManager = LinearLayoutManager(this)
            getAllcomment = GetAllCommentsAdapter(ArrayList(), upVote, downVote) // I have declare Adapter all parameter
            getMainApp().swiftAPI.getAllComments(post_id).enqueue(object : Callback<ArrayList<Comments>>{
                override fun onFailure(call: Call<ArrayList<Comments>>, t: Throwable) {
                    Toast.makeText(this@ViewSinglePostActivity, t?.message, Toast.LENGTH_SHORT)
                }

                override fun onResponse(call: Call<ArrayList<Comments>>, response: Response<ArrayList<Comments>>) {
                    if (response?.isSuccessful!!){
                        getAllcomment.commentList.addAll(response.body()!!)
                        customView.popup_rcv.adapter = getAllcomment
                        getAllcomment.notifyDataSetChanged()
                    }
                }
            }) 
  

Адаптер GetAllcomments:

 class GetAllCommentsAdapter (var commentList: ArrayList<Comments>, val upVote: View.OnClickListener, val downVote: View.OnClickListener) : RecyclerView.Adapter<GetAllCommentsAdapter.ViewHolder>() {
    var comment_id = 0
    var commentHashMap = HashMap<Int, Int>()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.popup_rcv, parent, false)
        return ViewHolder(itemView)
    }

    override fun getItemCount(): Int {
        return commentList.count()
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.comment?.setText(commentList.get(position).comment)
        holder.username?.setText(commentList.get(position).username)
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var username : TextView ?= null
        var comment : TextView ?= null
        var upvote : ImageView ?= null
        var downvote : ImageView ?= null
        init {
            this.username = itemView.findViewById(R.id.dialog_cmt_user_txt)
            this.comment = itemView.findViewById(R.id.dialog_cmt_txt)
            this.upvote = itemView.findViewById(R.id.upvote_comment_img)
            this.downvote = itemView.findViewById(R.id.downvote_comment_img)
        }
    }
  

Но я получаю эту ошибку, когда открываю всплывающее окно.

не было инициализировано обновление свойства lateinit

Заранее спасибо

Ответ №1:

Это ошибка вашей реализации, обычно вы должны инициализировать var во время компиляции, но с lateinit ключевым словом вы пообещали компилятору, что инициализируете его позже, когда ваше приложение будет запущено, и что оно не должно выдавать ошибку во время компиляции, но вы не выполнили это обещание, теперь, когда вы пытаетесь использовать переменную, которую вы никогда не инициализировали, вы получаете исключение.

Таким образом, решением было бы предоставить реализацию для прослушивателей щелчков upVote и downVote перед их использованием.

Комментарии:

1. Спасибо, сэр, ваш ответ объяснил мне, где я был неправ.