在Kotlin中切换可见性,isVisible未解决参考

时间:2019-06-05 15:44:58

标签: android kotlin android-view

缓慢学习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

4 个答案:

答案 0 :(得分:3)

如上所述,您可以自己指定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

答案 1 :(得分:2)

您自己为视图定义了isVisible吗?
View类没有名为isVisible()的方法。

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

fun View.isVisible(): Boolean {
    return this.visibility == View.VISIBLE
}

答案 2 :(得分:1)

isVisible()中没有View方法。
您可以这样定义扩展方法:

fun View.toggleVisibility() {
    this.visibility = if (this.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
}

答案 3 :(得分:1)

正如@Vadim Kotov所说,isVisible不是View中存在的方法。但是,有一个getVisibility()函数将返回三个可能的可见性值之一:VISIBLEINVISIBLEGONE。您可以使用这些结果来确定可见性并根据需要进行设置。