開發的過程中遇到了如標題所述的問題 具體的圖如下所示
在PopupWindow的佈局中定義的recyclerview 點擊之後item會變色 但是一開始在adapter中是這麼寫的:
holder.mItemView.setOnClickListener {
isSelected = !isSelected
mDataList[position].isSelected = isSelected
holder.mItemView.isSelected = isSelected
Log.e("PopupMultiItemAdapter", "position = $position isSelected = $isSelected mItemView.isSelected = ${holder.mItemView.isSelected}")
holder.mTextView.setTextColor(
if (isSelected) Color.WHITE
else holder.mItemView.context.resources.getColor(R.color.alphaColorCyan)
)
}
但是發現 點擊之後將點擊後的item滑出屏幕 再滑回來點擊時 需要點擊兩次才能走進這個點擊代碼的邏輯 即便打斷點調試 也沒找到問題所在。於是我就換了思路想 看看setOnTouchListener這個方法 畢竟觸摸事件還是優先分發的 當我在這個方法裏打日誌後 發現:
果然會觸發兩次(只DOWN和UP) 所以可以在這裏做一下處理:
holder.mItemView.setOnTouchListener { v, event ->
Log.e("PopupMultiItemAdapter", "onTouch")
when (event.action) {
MotionEvent.ACTION_DOWN -> {
return@setOnTouchListener true
}
MotionEvent.ACTION_UP -> {
isSelected = !isSelected
mDataList[position].isSelected = isSelected
holder.mItemView.isSelected = isSelected
Log.e("PopupMultiItemAdapter", "position = $position isSelected = $isSelected mItemView.isSelected = ${holder.mItemView.isSelected}")
holder.mTextView.setTextColor(
if (isSelected) Color.WHITE
else holder.mItemView.context.resources.getColor(R.color.alphaColorCyan)
)
return@setOnTouchListener true
}
else -> {
return@setOnTouchListener false
}
}
}
這樣就可以解決問題了~