我对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版本的警告(除了未解决的引用错误),所以我更改了它。
有人知道如何解决这些未解析的引用吗?
发布于 2019-01-20 20:37:05
您的方法无法解析,因为alert是在某种上下文之上实现的扩展方法。可用的方法有Context.alert、Fragment.alert和AnkoContext.alert。因此,如果您希望将警告对话框包装在另一个方法中,它还必须扩展这三个类中的一个。
因此,您的makeDialog函数应该如下所示:
fun Context.makeDialog() = alert("Test") {
yesButton { toast("oh..") }
noButton { }
}https://stackoverflow.com/questions/54055223
复制相似问题