Обработка нажатого события в RecyclerView - PullRequest
0 голосов
/ 03 июля 2019

У меня есть RecyclerView с простыми предметами.Я хочу обработать событие onPress.Если пользователь нажимает и удерживает палец на предмете в течение 2 секунд, он должен удалить его.Но я не знаю, как справиться с задержкой.Я использовал CoroutineScope для задержки обратного вызова из AlertDialog, но это вызвало ошибку.

Решение:

vh.root.setOnTouchListener { _, event ->
     if (event.action == MotionEvent.ACTION_DOWN){
          launch {
              delay(2000)
              onChosen(true, item.vehicleId, i, this@dialogCustomView)
          }
      }
      true
}

Ошибка: android.view.WindowLeaked: Activity MainActivity has leaked window DecorView@a1d8d91[Item1] that was originally added here

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Я не знаю, если это именно то, что вы хотите, но вот что я обычно делаю (хотя я использую по клику большую часть времени:

class MyAdapter : RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    val myItems = mutableListOf<Item>()

    ....

    override fun onBindViewHolder(holder: MyAdapter.MyViewHolder, position: Int) {
        holder.update(myItems[position], position)
    }

    fun itemTouched(position: Int) {
        myItems.removeAt(position)
        notifyItemRemoved(position)
    }

    inner class MyViewHolder(view: View) : Recyclerview.Viewholder(view) {
        var mPosition = -1
        var mLastTouch: Long = 0

        init {
            view.SetOnTouchListener { _, event ->
            if (event.action == MotionEvent.ACTION_DOWN) {
                mLastTouch = System.currentTimeMillis()

            }else if (event.action == MotionEvent.ACTION_UP) {
                if (System.currentTimeMillis() - lastTouch > 2000) {
                    this@MyAdapter.itemTouched(mPosition)
                }
                mLastTouch = 0
            }
        }
    }
            }
        }

        fun update(item: Item, position: Int) {
            mPosition = position
            //do updates from item
        }
    }
}
0 голосов
/ 03 июля 2019

может быть setOnLongClickListener может вам помочь.

...