在 Kotlin 中切换可见性,isVisible 未解决的引用
Toggling visibility in Kotlin, isVisible unresolved reference
慢慢学习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
}
}
}
编译器错误:
unresolved reference isVisible
你自己定义了isVisible
一个View吗?
View class 没有调用方法isVisible()
。
正如@user2340612所说,可以定义为:
fun View.isVisible(): Boolean {
return this.visibility == View.VISIBLE
}
classView
里面没有isVisible()
方法。
您可以像这样定义扩展方法:
fun View.toggleVisibility() {
this.visibility = if (this.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
}
正如@Vadim Kotov 所说,isVisible
不是 View
中存在的方法。但是,有一个 getVisibility()
函数将 return 三个可能的可见性值之一:VISIBLE
、INVISIBLE
或 GONE
。您可以使用这些结果来确定可见性并根据需要进行设置。
如上所说,你可以自己指定isVisible()
作为扩展函数
fun View.isVisible() = this.visibility == View.Visible
或者您可以添加 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"
KTX 是一组常用的 Kotlin 扩展。还要检查:https://developer.android.com/kotlin/ktx
慢慢学习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
}
}
}
编译器错误:
unresolved reference isVisible
你自己定义了isVisible
一个View吗?
View class 没有调用方法isVisible()
。
正如@user2340612所说,可以定义为:
fun View.isVisible(): Boolean {
return this.visibility == View.VISIBLE
}
classView
里面没有isVisible()
方法。
您可以像这样定义扩展方法:
fun View.toggleVisibility() {
this.visibility = if (this.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
}
正如@Vadim Kotov 所说,isVisible
不是 View
中存在的方法。但是,有一个 getVisibility()
函数将 return 三个可能的可见性值之一:VISIBLE
、INVISIBLE
或 GONE
。您可以使用这些结果来确定可见性并根据需要进行设置。
如上所说,你可以自己指定isVisible()
作为扩展函数
fun View.isVisible() = this.visibility == View.Visible
或者您可以添加 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"
KTX 是一组常用的 Kotlin 扩展。还要检查:https://developer.android.com/kotlin/ktx