所有 Anko 引用都是未定义的
All Anko references are undefined
我完全不熟悉 android 开发,所以我几天前才安装 Android studio。
我创建了一个支持 Kotlin 的新项目和一个空 activity,并想使用 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 版本,所以我改变了它。
有谁知道如何解决这些未解决的引用?
您的方法未解析,因为 alert
是在某种上下文之上实现的扩展方法。可用的方法是 Context.alert
Fragment.alert
和 AnkoContext.alert
。所以如果你想用另一种方法包装你的警报对话框,它也必须扩展这三个 类.
之一
因此您的 makeDialog
函数应如下所示:
fun Context.makeDialog() = alert("Test") {
yesButton { toast("oh..") }
noButton { }
}
我完全不熟悉 android 开发,所以我几天前才安装 Android studio。 我创建了一个支持 Kotlin 的新项目和一个空 activity,并想使用 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 版本,所以我改变了它。
有谁知道如何解决这些未解决的引用?
您的方法未解析,因为 alert
是在某种上下文之上实现的扩展方法。可用的方法是 Context.alert
Fragment.alert
和 AnkoContext.alert
。所以如果你想用另一种方法包装你的警报对话框,它也必须扩展这三个 类.
因此您的 makeDialog
函数应如下所示:
fun Context.makeDialog() = alert("Test") {
yesButton { toast("oh..") }
noButton { }
}