Переключение видимости в Котлине - это неразрешенная ссылка - PullRequest
1 голос
/ 05 июня 2019

Медленно учу Котлина. Просто генерируем случайное число из броска. Если 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 ]

3 голосов
/ 05 июня 2019

Как уже упоминалось выше, вы можете указать 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

2 голосов
/ 05 июня 2019

Вы сами определили isVisible для просмотра?
Представление В классе нет метода с именем isVisible().

Как сказал @ user2340612, его можно определить как:

fun View.isVisible(): Boolean {
    return this.visibility == View.VISIBLE
}
1 голос
/ 05 июня 2019

Как сказал @ Вадим Котов, isVisible - это не метод, существующий в View. Однако есть функция getVisibility(), которая возвращает одно из трех возможных значений видимости: VISIBLE, INVISIBLE или GONE. Вы можете использовать эти результаты, чтобы определить видимость и установить ее так, как вы хотите.

1 голос
/ 05 июня 2019

В классе View нет метода isVisible().Вы можете определить свой метод расширения следующим образом:

fun View.toggleVisibility() {
    this.visibility = if (this.visibility == View.VISIBLE) View.INVISIBLE else View.VISIBLE
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...