anko - вызывать функцию из отдельного класса - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь выяснить, как вызывать функцию из отдельного класса при работе с Anko.

Я пробовал различные стратегии, но вернулся к примеру документации Anko Component

class UserOrder : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        UserOrderUI().setContentView(this)
    }
}

class UserOrderUI : AnkoComponent<UserOrder> {
    override fun createView(ui: AnkoContext<UserOrder>) = with(ui) {
        val util = Util()
        verticalLayout {
            val name = editText()
            button("Say Hello") {
            }
            linearLayout {
                util.test()
            }

        }
    }

}

class Util{
    fun _LinearLayout.test(){
        button("Say Hello") {
        }
    }
}

Приведенный выше код рядом с util.test () говорит, что не может найти функцию.

У меня такой вопрос: как я могу вызвать функцию из отдельного класса (для поощрения кодаповторное использование), который возвращает макет (вертикальный план для этой цели)

Например:

fun getLayout(): LinearLayout {
    return linearLayout {
        //stuff in here
    }
}

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

1 Ответ

0 голосов
/ 30 мая 2018

Проблема в том, что вы определили _LinearLayout.test как функцию расширения члена из Util.Это означает, что к нему можно получить доступ только в контексте Util экземпляра.Также обратите внимание, что вы пытались вызвать метод на util, что не совсем правильно.Он определен только для типа получателя _LinearLayout.

К счастью, функции области видимости позволяют использовать область видимости других объектов, и здесь рекомендуется with:

linearLayout {
    with(util){ 
        test()
    }
}

Вы можетеПрочтите о функциях контекста Kotlin в следующей статье, которую я написал.Также упоминается ваш вариант использования функций расширения члена: https://kotlinexpertise.com/coping-with-kotlins-scope-functions/

...