首页 > 解决方案 > LongClickListerner 没有响应(Kotlin/RecyclerView

问题描述

我在我的 recycleview 中实现了一个 onClicklistener ,但 onLongClickListener 没有响应?我已经在适配器中添加了代码,该代码是从片段中调用的。onClickListener 运行良好。当我点击 onLongClick -> 它需要显示一个 AlertDialog,但在这种情况下,在运行应用程序时,没有错误,也没有 longclick。这是在 Kotlin 中,我做错了什么 - 请问有什么想法吗?

class UserMsgAdapter(
mContext: Context,
userMsgList: List<MessageList>,
mUsers: List<Users>,
isChatCheck: Boolean
): RecyclerView.Adapter<UserMsgAdapter.ViewHolder?>()
{
    private val mContext: Context
    private val userMsgList: List<MessageList>
    private val mUsers:List<Users>
    private var isChatCheck: Boolean

init{
    this.mUsers = mUsers
    this.userMsgList = userMsgList
    this.mContext = mContext
    this.isChatCheck = isChatCheck
}

var lastMsg: String = ""
var timeMsg: Long = 0

override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
    val view: View = LayoutInflater.from(mContext).inflate(
        R.layout.user_search_item_layout,
        viewGroup,
        false
    )
    return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val message: MessageList? = userMsgList[position]
    //Accessing the receiverId from the ChatList
    val receiverId = message!!.getId()
    val ref = FirebaseDatabase.getInstance().reference.child("Users").child(receiverId!!)
    ref.addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            val user = p0.getValue(Users::class.java)
            holder.userNameText.text = user!!.getUserName()
            Picasso.get().load(user.getProfile())
                .placeholder(R.drawable.ic_baseline_whatshot_24).fit().centerCrop().into(
                holder.profileImageView
            )
            //Showcasing Last Message
            if (isChatCheck) {
                retrieveLastMessage(
                    user.getUID(),
                    holder.lastMessagetxt,
                    holder.timestamptxt,
                    holder.new_message_count
                )
            } else {
                holder.lastMessagetxt.visibility = View.GONE
            }

            //Calling the Message Activity
            holder.itemView.setOnClickListener {
                val intent = Intent(mContext, MessageActivity::class.java)
                intent.putExtra("visit_id", user.getUID())
                mContext.startActivity(intent)
            }

            //Menu on Search Fragment
            holder.itemView.setOnLongClickListener {
                val options = arrayOf<CharSequence>(
                    "Delete Chat",
                    "Visit Profile"
                )
                val builder: AlertDialog.Builder = AlertDialog.Builder(mContext)
                builder.setTitle("What would you like to do?")
                builder.setItems(options, DialogInterface.OnClickListener { _, which ->
                    if (which == 0) {
                        val intent = Intent(mContext, MessageActivity::class.java)
                        intent.putExtra("visit_id", user.getUID())
                        mContext.startActivity(intent)
                    }
                    if (which == 1) {
                        val intent = Intent(mContext, VisitUserProfile::class.java)
                        intent.putExtra("visit_id", user.getUID())
                        mContext.startActivity(intent)
                    }
                })
                builder.show()
                true
            }
        }

        override fun onCancelled(error: DatabaseError) {

        }

    })

}

override fun getItemCount(): Int {
    return userMsgList.size
}

class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
{
    var userNameText: TextView = itemView.findViewById(R.id.username)
    var profileImageView: ShapeableImageView = itemView.findViewById(R.id.profile_image)
    var lastMessagetxt: TextView = itemView.findViewById(R.id.last_message)
    var timestamptxt: TextView = itemView.findViewById(R.id.time_stamp)
    var new_message_count: TextView = itemView.findViewById(R.id.new_message_count)
}

//print last message and timestamp
private fun retrieveLastMessage(
    messageUserId: String?, lastMessagetxt: TextView,
    timestamptxt: TextView, new_message_count: TextView,
)
{
    lastMsg = "defaultMsg"
    timeMsg = 0
    var countUnreadMessages = 0

    val firebaseUser = FirebaseAuth.getInstance().currentUser
    val reference = FirebaseDatabase.getInstance().reference.child("Chats")

    reference.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            for (dataSnapshot in p0.children) {
                val message: Message? = dataSnapshot.getValue(Message::class.java)

                if (firebaseUser != null && message != null) {
                    if (message.getReceiver() == firebaseUser.uid && message.getSender() == messageUserId ||
                        message.getReceiver() == messageUserId && message.getSender() == firebaseUser.uid
                    ) {
                        lastMsg = message.getMessage()!!
                        timeMsg = message.getTimestamp()!!
                    }
                    if (message.getReceiver() == firebaseUser.uid && message.getSender() == messageUserId && !message.isIsSeen()) {
                        countUnreadMessages += 1
                    }
                }
            }
            when (lastMsg) {
                "defaultMsg" -> lastMessagetxt.text = ""
                "Shared an image with you." -> lastMessagetxt.text = "Shared an image"
                else -> lastMessagetxt.text = lastMsg
            }
            //Display count of unread messages
            if (countUnreadMessages != 0) {
                new_message_count.text = countUnreadMessages.toString()
                new_message_count.setBackgroundResource(R.drawable.new_chat_bg)
            } else {
                new_message_count.setBackgroundResource(0)
                new_message_count.text = ""
            }
            countUnreadMessages = 0
            //Display formatted date and time
            val time = dateFormatter(timeMsg)
            when (time) {
                "01-01-1970" -> timestamptxt.text = ""
                else -> timestamptxt.text = time
            }
        }

        override fun onCancelled(error: DatabaseError) {

        }
    })
}

}

标签: androidkotlinonclicklistener

解决方案


推荐阅读