所有Anko参考均未定义

时间:2019-01-05 18:57:29

标签: android kotlin anko

我对android开发完全陌生,所以几天前我刚刚安装了Android Studio。 我创建了一个有Kotlin支持且活动为空的新项目,并希望使用anko库创建一个对话框。

我的MainActivity.kt看起来像这样:

package me.example.com.test

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        b_test.setOnClickListener {
            makeDialog().show()
        }
    }
}

我创建了一个test_dialog.kt,其中包含以下内容:

package me.example.com.test

import org.jetbrains.anko.*

fun makeDialog() = alert("Test"){
    yesButton { toast("Oh…") }
    noButton {}
}

并在应用程序的build.gradle中添加了anko内容:

implementation "org.jetbrains.anko:anko-commons:$anko_version"

// Anko Layouts
implementation "org.jetbrains.anko:anko-sdk27:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

// Coroutine listeners for Anko Layouts
implementation "org.jetbrains.anko:anko-sdk27-coroutines:$anko_version"
implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"

// Anko SQLite
implementation "org.jetbrains.anko:anko-sqlite:$anko_version"

当我第一次从他们的GitHub复制粘贴时,它是sdk25。我将其替换为27(因为这是项目创建时选择的api)。

在我添加的项目的build.gradle中:

ext.kotlin_version = '1.3.0'
ext.anko_version='0.10.8'

两个版本都有相同的问题:test_dialog.kt中的alert,yesButton,noButton和toast是未解决的引用。

Kotlin版本最初是不同的,但是有一个警告(除了未解决的引用错误),说一些关于不匹配的Kotlin版本的信息,所以我对此进行了更改。

有人知道如何解决这些未解决的引用吗?

1 个答案:

答案 0 :(得分:1)

您的方法未解决,因为alert是在某种上下文之上实现的扩展方法。可用的方法是Context.alert Fragment.alertAnkoContext.alert。因此,如果要将警报对话框包装为其他方法,则还必须扩展这三个类之一。

因此您的makeDialog函数应如下所示:

fun Context.makeDialog() = alert("Test") {
    yesButton { toast("oh..") }
    noButton { }
}