Все ссылки Anko не определены - PullRequest
0 голосов
/ 05 января 2019

Я совершенно новичок в разработке 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'

Обе версии имеют одну и ту же проблему: alert, yesButton, noButton и toast в test_dialog.kt являются неразрешенными ссылками.

Версия Kotlin изначально отличалась, но было предупреждение (в дополнение к неразрешенным ошибкам ссылок), говорящее о несовпадающих версиях Kotlin, поэтому я изменил это.

Кто-нибудь знает, как решить эти неразрешенные ссылки?

1 Ответ

0 голосов
/ 20 января 2019

Ваши методы не разрешены, потому что alert - это метод расширения, реализованный поверх некоторого контекста. Доступны следующие методы: Context.alert Fragment.alert и AnkoContext.alert. Поэтому, если вы хотите заключить диалоговое окно с предупреждением в другой метод, оно также должно расширить один из этих трех классов.

Итак, ваша makeDialog функция должна выглядеть примерно так:

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