Onclick слушатель в Recyclerview всплывающего окна - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь сделать всплывающее окно, где пользователь может увидеть 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 upVote не было инициализировано

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

1 Ответ

0 голосов
/ 04 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...