Потихоньку изучаю Котлин. Просто генерирует случайное число из рулона. Если 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 для просмотра?
В классе Вид нет метода с именемisVisible().
Как сказал @user2340612, это можно определить как:
fun View.isVisible(): Boolean {
return this.visibility == View.VISIBLE
}
Спасибо, я предполагал, что в классе View будет метод isVisible.
Он существует как расширение Kotlin, просто у вас нет правильной зависимости в соответствии с собственно правильный ответ.
Внутри класса нет метода isVisible()View.
Вы можете определить свой метод расширения следующим образом:
fun View.toggleVisibility() {
this.visibility = if (this.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
}
Как сказал @Вадим Котов, isVisible — это не метод, который существует внутри View. Однако существует функция getVisibility(), которая возвращает одно из трех возможных значений видимости: 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
Я не думаю, что есть какой-то
isVisible()метод, но лучше проверитьif (visibility == View.VISIBLE). Это потому, что есть 3 возможных значения видимости:VISIBLE,INVISIBLEиGONE.