Отображение контекстного меню RecyclerView в приложении "Чат"

Не получается вывести контекстное меню при удержании TextView. TextView появляется когда Я или бот отвечает мне.

Весь код представлен ниже.

<menu xmlns:android="http://schemas.android.com/apk/res/android">


    <item
        android:id="@+id/op1"
        android:title="Копировать"
        >

    </item>


    <item
        android:id="@+id/op2"
        android:title="Удалить"
        >

    </item>
</menu>
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) {
        super.onCreateContextMenu(menu, v, menuInfo)
       activity?.menuInflater?.inflate(R.menu.nav_content_menu, menu)
    }
    


override fun onContextItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.op1 -> {
               
                val clipboard = textuser.context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?
                val clip = ClipData.newPlainText("Order Number", textuser.text.toString())
                clipboard?.setPrimaryClip(clip)
                true
            }
            R.id.op1 -> {
                
                textuser.text = ""
                true
            }
            else -> super.onContextItemSelected(item)
        }
    }

ломается в этих строчках textuser = view.findViewById(R.id.idTVUser) registerForContextMenu(textuser)

ОБНОВЛЕНО

В общем, я глянул на ютубе, принципе всё сделал как там. Но есть 2 момента.

у меня

        super.onCreateContextMenu(menu, v, menuInfo)
       activity?.menuInflater?.inflate(R.menu.nav_content_menu, menu)
    }

в видео было вот так


override fun onCreateContextMenu(
menu: ContextMenu?,
v: View?,
menuInfo: ContextMenu.ContextMenuInfo?

super.onCreateContextMenu(menu, v, menuInfo)

menu !!. setHeaderTitle("Select Below Item")

menu.add(0,v !!. id,0,"Sub Item 1")
menu.add(0,v !!. id,0,"Sub Item 2")
menu.add(0,v !!. id,0,"Sub Item 3")

и остался один момент. Это видимо чтобы он понимал по каким нужно тыкнуть, потому что у меня же чат, и новые должны тоже появляться.

messageRV = view.findViewById(R.id.idRVMessage)
        messageRV.adapter = messageRVAdapter
        registerForContextMenu(messageRV)

Код onViewCreated

lateinit var queryEdt: TextInputEditText
    lateinit var queryEdtBut: Button
    lateinit var messageRV: RecyclerView
    lateinit var messageRVAdapter: MessageRVAdapter
    lateinit var messageList: ArrayList<MessageRVModal>

@SuppressLint("ClickableViewAccessibility")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val recyclerView: RecyclerView = view.findViewById(R.id.idRVMessage)
        val btnScrollDown: ImageButton = view.findViewById(R.id.btnScrollDown)

        queryEdt = view.findViewById(R.id.idEdtQuery)
        queryEdtBut = view.findViewById(R.id.button2)
        messageRV = view.findViewById(R.id.idRVMessage)
        messageList = ArrayList()
        messageRVAdapter = MessageRVAdapter(messageList)

        messageRV.adapter = messageRVAdapter
        registerForContextMenu(messageRV)

       




        val layouManager = LinearLayoutManager(view.context)
        messageRV.layoutManager = layouManager




        queryEdtBut.setOnClickListener {
            
            if (queryEdt.text.toString().isNotEmpty()) {
                
                messageList.add(MessageRVModal(queryEdt.text.toString(), "user"))
                
                messageRVAdapter.notifyDataSetChanged()

                val adapter = messageRV.adapter

                if (adapter != null) {
                    val lastPosition = adapter.itemCount - 1
                    if (lastPosition >= 0) {
                        messageRV.scrollToPosition(lastPosition)
                    }
                }
     




                
            } else {
               
                Toast.makeText(activity, "Please enter your query..", Toast.LENGTH_SHORT).show()
            }
        }


        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                if (dy < 0) { // Пользователь прокручивает вверх
                    btnScrollDown.visibility = View.VISIBLE
                } else if (dy > 0) { // Пользователь прокручивает вниз
                    btnScrollDown.visibility = View.GONE
                }
            }
        })

            btnScrollDown.setOnClickListener {
                recyclerView.scrollToPosition(messageRVAdapter.itemCount - 1) // Прокрутка к последнему элементу
                it.visibility = View.GONE // Скрываем кнопку после прокрутки
            }



        queryEdt.setOnEditorActionListener(TextView.OnEditorActionListener{ textView, i, keyEvent->
            if(i== EditorInfo.IME_ACTION_SEND){
                if(queryEdt.text.toString().length >0){

                    messageList.add(MessageRVModal(queryEdt.text.toString(),"user"))
                    messageRVAdapter.notifyDataSetChanged()


                    val f=queryEdt.text.toString()
                    val adapter = messageRV.adapter
                    if (adapter != null) {
                        val lastPosition = adapter.itemCount - 1
                        if (lastPosition >= 0) {
                            messageRV.scrollToPosition(lastPosition)
                        }
                    }


                   
                    


                } else{
                    Toast.makeText(activity,"Please enter your query..", Toast.LENGTH_SHORT).show()
                }
                return@OnEditorActionListener true
            }
            false
        })

    }

Обновлено onBindViewHolder в Адаптере

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val seder = messageList.get(position).sender
        
        var selectedItemPosition: Int = -1

        val message = messageList[position]


        holder.itemView.setOnLongClickListener { view ->
           
            selectedItemPosition = holder.adapterPosition
            
            view.showContextMenu()
            true
        }


        when(seder){
            "user" -> (holder as UserMessageViewHolder).userMsgTV.setText(messageList.get(position).message)
            "bot" -> (holder as BotMessageViewHolder).botMsgTV.setText(messageList.get(position).message)
            "wr" -> (holder as WrMessageViewHolder).WrMsgTV.setText(messageList.get(position).message)
        }
    }

Ответы (0 шт):