I need to enable selection mode when the item is long clicked and disable it when the selection list is empty . on click is working fine but long click is not working properly
class FolderRAdapter(
var list: ArrayList<Image>,
var folderInteractionListener: FolderInteractionListener
) :
RecyclerView.Adapter<FolderRAdapter.BaseViewHolder>() {
var selectedList = HashSet<Image>()
val selectionViewType = 1
val nonSelectionViewType = 2
var isSelectionMode = false
inner class FolderRViewHolder(
view: View
) : BaseViewHolder(view), View.OnClickListener, View.OnLongClickListener {
init {
view.isLongClickable = true
view.isClickable = true
view.setOnClickListener(this)
view.setOnLongClickListener(this)
}
override fun onClick(v: View?) {
folderInteractionListener.onItemClicked(list[adapterPosition])
}
override fun onLongClick(v: View?): Boolean {
isSelectionMode = true
return true
}
}
inner class SelectionViewHolder(
view: View
) : BaseViewHolder(view), View.OnClickListener {
init {
view.setOnClickListener(this)
view.checkbox.setOnClickListener(this)
}
override fun onClick(view: View?) {
val image = list[adapterPosition]
if (selectedList.contains(image)) {
view?.checkbox?.isChecked = false
view?.checkbox_container?.setBackgroundColor(0)
selectedList.remove(list[adapterPosition])
} else {
selectedList.add(list[adapterPosition])
view?.checkbox?.isChecked = true
view?.checkbox_container?.setBackgroundColor(Color.parseColor("#59FFFFFF"))
}
notifyItemChanged(adapterPosition)
if (selectedList.isEmpty()) {
isSelectionMode = false
}
}
}
open inner class BaseViewHolder(view: View) : RecyclerView.ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
return if (viewType == selectionViewType) {
val selectedView
: View = LayoutInflater.from(parent.context)
.inflate(R.layout.container_selection, parent, false)
SelectionViewHolder(selectedView)
} else {
val nonSelectedView
: View = LayoutInflater.from(parent.context)
.inflate(R.layout.container_imageholder, parent, false)
FolderRViewHolder(nonSelectedView)
}
}
override fun getItemCount(): Int {
return list.size
}
override fun getItemViewType(position: Int): Int {
return if (isSelectionMode) selectionViewType else nonSelectionViewType
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
if (holder is SelectionViewHolder) {
val image = list[position]
holder.itemView.checkbox.isChecked = selectedList.contains(image)
}
val factory =
DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build()
GlideApp.with(holder.itemView.context).load(list[position].uri)
.transition(DrawableTransitionOptions.with(factory))
.override(250, 250).into(holder.itemView.img)
}
interface FolderInteractionListener {
fun onItemClicked(image: Image)
}
}
I have tried setting the view to long clickable true and returning true to onLongClick method even though I'm not getting on long click method is not triggering
combine viewHolders and their layouts and implement clicks like below:
inner class FolderRViewHolder(
view: View
) : BaseViewHolder(view), View.OnClickListener, View.OnLongClickListener {
init {
view.isLongClickable = true
view.isClickable = true
view.setOnClickListener(this)
view.setOnLongClickListener(this)
}
override fun onClick(view: View?) {
if (isSelectionMode) {
val string = list[adapterPosition]
if (selectedList.contains(string)) {
selectedList.remove(list[adapterPosition])
} else {
selectedList.add(list[adapterPosition])
}
notifyItemChanged(adapterPosition)
if (selectedList.isEmpty()) {
isSelectionMode = false
}
} else {
folderInteractionListener.onItemClicked(list[adapterPosition])
}
}
override fun onLongClick(view: View?): Boolean {
isSelectionMode = true
onClick(view)
return true
}
}
and:
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
holder.itemView.textView.text = list[position]
val string = list[position]
if (selectedList.contains(string)){
holder.itemView.checkbox?.isChecked = false
holder.itemView.checkbox_container?.setBackgroundColor(0)
} else {
view?.checkbox?.isChecked = true
view?.checkbox_container?.setBackgroundColor(Color.parseColor("#59FFFFFF"))
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.