【问题标题】:How to fix "Unresolved reference. None of the following candidates is applicable because of receiver type mismatch"如何修复“未解决的参考。由于接收器类型不匹配,以下候选均不适用”
【发布时间】:2019-08-05 04:28:30
【问题描述】:

未解决的参考。由于接收器类型不匹配,以下候选均不适用

我尝试创建倒数计时器,但出现错误

科特林文件:

import android.os.Bundle
import android.os.CountDownTimer
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main5.*

class Main5Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main5)
        val timer = MyCounter(10000, 1000)
        start.setOnClickListener { timer.start() }
        stop.setOnClickListener { timer.cancel() }
    }
}

class MyCounter(millisInFuture: Long, countDownInterval: Long) : 
CountDownTimer(millisInFuture, countDownInterval) {

    override fun onFinish() {
        println("Timer Completed.")
        qq.text = "Timer Completed."

    }

    override fun onTick(millisUntilFinished: Long) {
        qq.textSize = 50f

        qq.text = (millisUntilFinished / 1000).toString() + ""
        println("Timer  : " + millisUntilFinished / 1000)
    }
}

ACTIVITY_MAIN5:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main5Activity">

<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/pomodoro_timer"
        android:textAlignment="center"
        android:textSize="40sp"
        tools:ignore="MissingConstraints"/>

<Button
        android:id="@+id/start"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="8dp"
        android:background="#55ff00"
        android:text="@string/start_timer"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" 
android:layout_marginLeft="8dp">

</Button>

<Button
        android:id="@+id/stop"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:background="#ff0000"
        android:text="@string/stop_timer"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" 
android:layout_marginRight="8dp">

</Button>

<TextView
        android:id="@+id/qq"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="332dp"
        android:text=""
        android:textAlignment="center"
        android:textColor="#ff4000"
        android:textSize="50sp"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:layout_editor_absoluteX="0dp" 
tools:ignore="MissingConstraints"/>


</androidx.constraintlayout.widget.ConstraintLayout>

我对 kotlin 文件中的 qq(在 activity_main5 中描述)有问题

未解决的参考。由于接收器类型不匹配,以下候选均不适用:

public val Activity.qq: TextView! defined in 
kotlinx.android.synthetic.main.activity_main5 in file activity_main5.xml
public val Dialog.qq: TextView! defined in 
kotlinx.android.synthetic.main.activity_main5 in file 
activity_main5.xml``
public val android.app.Fragment.qq: TextView! defined in 
kotlinx.android.synthetic.main.activity_main5 in file activity_main5.xml
public val androidx.fragment.app.Fragment.qq: TextView! defined in 
kotlinx.android.synthetic.main.activity_main5 in file activity_main5.xml

【问题讨论】:

  • 你能解决这个问题吗?请帮忙。

标签: kotlin


【解决方案1】:

您必须将LayoutContainer 添加到您的计时器类,然后创建一个具有活动视图的实例:

class MyCounter(millisInFuture: Long, countDownInterval: Long, override val containerView: View?) :
    CountDownTimer(millisInFuture, countDownInterval), LayoutContainer {

    override fun onFinish() {
        println("Timer Completed.")
        qq.text = "Timer Completed."

    }

    override fun onTick(millisUntilFinished: Long) {
        qq.textSize = 50f

        qq.text = (millisUntilFinished / 1000).toString() + ""
        println("Timer  : " + millisUntilFinished / 1000)
    }
}

class Main5Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main5)
        val timer = MyCounter(10000, 1000, findViewById(android.R.id.content))
        start.setOnClickListener { timer.start() }
        stop.setOnClickListener { timer.cancel() }
    }
}

【讨论】:

  • 它不起作用。 qq还是一样的错误。能否请您再次尝试解决此问题?
  • 我只是尝试使用我的解决方案从您的代码创建一个活动。它工作正常。
【解决方案2】:

尝试添加

androidExtensions {
  experimental = true
}

进入你的 build.gradle

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人学习
猜你喜欢
  • 2019-04-19
  • 2022-06-12
  • 2021-10-21
  • 2021-09-27
  • 1970-01-01
  • 2021-05-11
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多