【问题标题】:RecyclerView , kotlin, click response delayRecyclerView,kotlin,点击响应延迟
【发布时间】:2021-09-16 00:41:17
【问题描述】:

和平 我做了简单的recyclerview,带有界面clickListener 由 4 个项目组成,在点击时显示吐司。 如果我每秒单击一次,它工作正常, 但如果我快速点击不同的项目(1 秒内 2 或 3 次) 它仍然每秒显示吐司, 不要快速更换吐司

数据类代码:

    package com.elsersy.rv5

data class Items (var textt:String) {
}

适配器代码

package com.elsersy.rv5

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView

class MyAdapter(private var stringList:ArrayList<Items>,private val listener:MyOnClickListener):
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
    inner class MyViewHolder(itemView:View):RecyclerView.ViewHolder(itemView) {
        var text:TextView = itemView.findViewById(R.id.textView)

        init {
            itemView.setOnClickListener {
                val position = absoluteAdapterPosition
                if (position != RecyclerView.NO_POSITION)
                {
                    listener.onItemClick(position)
                }
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.row_item,parent,false)
        return MyViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val currentItem = stringList[position]
        holder.text.text = currentItem.textt
    }

    override fun getItemCount(): Int {
        return stringList.size
    }
    interface MyOnClickListener{
        fun onItemClick(position: Int)
    }
    fun setData(newItemList:ArrayList<Items>){
        val diffUtil = MyDiffUtil(stringList,newItemList)
        val diffResults = DiffUtil.calculateDiff(diffUtil)
        stringList = newItemList
        diffResults.dispatchUpdatesTo(this)
    }
}

ActivityMainCode

    package com.elsersy.rv5

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import com.elsersy.rv5.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity(),MyAdapter.MyOnClickListener {
    private lateinit var binding: ActivityMainBinding
    private lateinit var stringList:ArrayList<Items>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.recyclerView.layoutManager = LinearLayoutManager(this)
        stringList = arrayListOf<Items>()
        getStrings()
        binding.recyclerView.adapter=MyAdapter(stringList,this)
    }

    private fun getStrings() {
        for (a in 0..4){
            var string_Array = resources.getStringArray(R.array.string_array)
            stringList.add(Items(string_Array[a]))
        }
    }

    override fun onItemClick(position: Int) {
        Toast.makeText(this,"$position is clicked", Toast.LENGTH_SHORT).show()

    }
}

【问题讨论】:

  • 您到底打算如何处理吐司?
  • 只是为了确认clicklistener工作正常,但是即使我让点击增加一个整数,如果我点击很多次,它每秒增加一个

标签: android kotlin android-recyclerview interface


【解决方案1】:

如果要在显示新的 toast 之前取消之前的 toast,请将其分配为成员变量并在显示新的之前取消它:

private var toast : Toast? = null
        ..
override fun onItemClick(position: Int) {
     toast?.cancel()
     toast = Toast.makeText(this,"$position is clicked", Toast.LENGTH_SHORT)
     toast?.show()
}

【讨论】:

  • 问题不在于吐司本身......即使我让点击增加一个整数,如果我点击很多次,它每秒增加一个......我想知道为什么会出现这个 1 秒的间隔
  • 如果您使用 toast 测试此行为,则 toast 是一个问题,因为 toast 不会自动替换以前的。 (如果您通过快速单击常规按钮来显示敬酒,这将是同样的问题)您是否使用日志进行测试?我的意思是将位置写入日志而不是显示敬酒。
  • 我用int++ .. onItemClick(count++) .. 多次点击每秒增加1次,
  • 好的,我会试着告诉你。感谢回复
  • @MuhammadElsersy 我的意思是用这个替换吐司:Log.d("MainActivity", "$position is clicked") 并观察日志。或者使用我提出的取消之前的 toast 的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多