【问题标题】:Error "None of the following functions can be called with the arguments supplied:" with Toast错误“不能使用提供的参数调用以下函数:”与 Toast
【发布时间】:2020-02-07 00:33:46
【问题描述】:

我想创建一个代码来单击 RecyclerView 的项目。我从网上找了一个,但是一直报这个错误:

以下函数都不能使用提供的参数调用:

public open fun makeText(p0: Context!, p1: CharSequence!, p2: Int): Toast!在 android.widget.Toast 中定义

public open fun makeText(p0: Context!, p1: Int, p2: Int): Toast!在 android.widget.Toast 中定义

这是我的代码:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
        val users = ArrayList<User>()

        val adapter = CustomAdapter(users)

        recyclerView.adapter = adapter

        recyclerView.addOnItemClickListener(object : OnItemClickListener {
            override fun onItemClicked(position: Int, view: View) {
                Toast.makeText(this, "Clicked on  " + users.get(position).name, Toast.LENGTH_LONG).show()
            }
        })


    }

    interface OnItemClickListener {
        fun onItemClicked(position: Int, view: View)
    }

    fun RecyclerView.addOnItemClickListener(onClickListener: OnItemClickListener) {
        this.addOnChildAttachStateChangeListener(object : RecyclerView.OnChildAttachStateChangeListener {
            override fun onChildViewDetachedFromWindow(view: View) {
                view.setOnClickListener(null)
            }

            override fun onChildViewAttachedToWindow(view: View) {
                view.setOnClickListener {
                    val holder = getChildViewHolder(view)
                    onClickListener.onItemClicked(holder.adapterPosition, view)
                }
            }
        })
    }

如何修复该错误消息?

【问题讨论】:

    标签: android-studio kotlin android-recyclerview android-toast


    【解决方案1】:
    Toast.makeText(this@YOUR_ACTIVITY_NAME, "Clicked on  " + users.get(position).name, Toast.LENGTH_LONG).show()
    

    【讨论】:

    • 成功了,谢谢!你能解释一下为什么吗?我见过 Toast 只使用“this”。
    • 当您在输入中设置 addOnItemClickListener 时,您正在传递一个抽象类的实例,因此当您调用“this”时,您指的是内部类实例(对象:OnItemClickListener),那么您必须说“ this" 指的是活动类而不是 OnItemClickListener。
    • 知道了。非常感谢。
    【解决方案2】:
    //In Activity use: 
    Toast.makeText(this@YOUR_ACTIVITY_NAME, "your message", Toast.LENGTH_LONG).show()
        
    //In Fragments use: 
    Toast.makeText(requireActivity(), "your message", Toast.LENGTH_LONG).show()
     
    Your problem will be solved...
    

    【讨论】:

    • requireActivity() 帮助了
    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多