Как преобразовать объект просмотра в мой макет в kotlin

#android #kotlin

#Android #котлин

Вопрос:

Как получить доступ к функции page.questionTextView in setAnswer

 //Create the given page (indicated by position)
override fun instantiateItem(container: ViewGroup, position: Int): Any {
    val page = inflater.inflate(R.layout.layout_question, null)
    page.questionTextView.text = "hi"

    //Add the page to the front of the queue
    (container as ViewPager).addView(page, 0)
    return page
}

private fun setAnswer(page: View){
    //how to access page.questionTextView
}
  

Комментарии:

1. Вы можете объявить страницу как глобальную переменную private lateinit var page: View

Ответ №1:

Я нашел решение: я использую метод «with» для доступа к странице.Вопрос_textview

 private fun setAnswer(page: View){
    with(page){
        questionTextView.text = "hi"
    }
}
  

Ответ №2:

Вы можете объявить переменную page на верхнем уровне, то есть непосредственно внутри пакета. По умолчанию, если вы не укажете модификатор видимости, ваша переменная будет общедоступной. Это означает, что он будет доступен везде (внутри пакета).

Дополнительная информация о видимости в kotlin: https://kotlinlang.org/docs/reference/visibility-modifiers.html

Ответ №3:

Если вы создадите глобальную переменную страницы для своего класса, вы можете инициализировать ее в своей функции instantiateItem и использовать ее для доступа к вашему представлению из функции setAnswer.

Попробуйте это

 private lateinit var page: View
//Create the given page (indicated by position)
override fun instantiateItem(container: ViewGroup, position: Int): Any {
    page = inflater.inflate(R.layout.layout_question, null)
    page.questionTextView.text = "hi"

    //Add the page to the front of the queue
    (container as ViewPager).addView(page, 0)
    return page
}

private fun setAnswer(){
    //how to access page.questionTextView
    page.questionTextView.text = "your answer"
}