在 Kotlin 中切换可见性,isVisible 未解析引用

Rob*_*Rob 4 android android-view kotlin

慢慢学习 Kotlin。只是从一卷中生成一个随机数。如果 roll = 9 我想让按钮和搜索栏不可见。

我正在使用 toggleVisibility 函数来完成此操作,但 Kotlin 编译器将 isVisible 视为未解析的引用

package com.example.randomizer

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.SeekBar
import android.widget.TextView
import android.widget.VideoView
import java.util.*

class MainActivity : AppCompatActivity() {

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

        val rollButton = findViewById<Button>(R.id.rollButton)
        val resultsTextView = findViewById<TextView>(R.id.resultsTextView)
        val seekBar = findViewById<SeekBar>(R.id.seekBar)
        val winText = "9 You Win !"




        rollButton.setOnClickListener {
            val rand = Random().nextInt(seekBar.progress)
            resultsTextView.text = rand.toString()
            if (rand == 9) {
                resultsTextView.text = winText
                seekBar.toggleVisibility()
                rollButton.toggleVisibility()
            }

        }



    }

    fun View.toggleVisibility() {
        if (this.isVisible()) {
            this.visibility = View.INVISIBLE
        } else {
            this.visibility = View.VISIBLE
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:

unresolved reference isVisible
Run Code Online (Sandbox Code Playgroud)

Gio*_*ous 10

正如上面提到的其他人,您可以isVisible()自己指定为扩展功能。

fun View.isVisible() = this.visibility == View.Visible
Run Code Online (Sandbox Code Playgroud)

或者您可以添加 KTX 视图依赖项并开始使用那里的一些方法。我建议你看看:https : //developer.android.com/reference/kotlin/androidx/core/view/package-summary#(android.view.View).isVisible : kotlin.Boolean

要导入并开始使用 KTX,请添加到您的依赖项中 build.gradle

implementation "androidx.core:core-ktx:1.0.2"
Run Code Online (Sandbox Code Playgroud)

KTX 是一组常用的 Kotlin 扩展。另检查:https : //developer.android.com/kotlin/ktx


Vad*_*tov 2

isVisibleView是你自己定义的吗?
View类没有名为 的方法isVisible()

正如@user2340612所说,它可以定义为:

fun View.isVisible(): Boolean {
    return this.visibility == View.VISIBLE
}
Run Code Online (Sandbox Code Playgroud)

  • 它确实作为 Kotlin 扩展存在,只是没有按照[实际正确答案](/sf/answers/3952503621/)正确的依赖关系 (3认同)