Почему .text работает только внутри onCreate? По крайней мере, в моем коде: - PullRequest
0 голосов
/ 05 апреля 2019

Я изучаю android studio и не могу понять, почему это происходит, я был бы признателен, если бы кто-нибудь мог объяснить мне это:

Когда я помещаю xxxxanything.text после onCreate, я получаю ожидаемую ошибку "объявление участника ", но оно работает внутри метода onCreate. Почему это происходит?

Я видел жизненный цикл активности несколько раз, но у меня все еще есть сомнения относительно того, куда поместить вещи, например, слушатель onclick.

Я уже задавался вопросом о нескольких руководствах, и сейчас я работаю над udacity, с трудом разбираясь в взглядах переработчиков, и я также пытаюсь разработать хорошие методы программирования.

Я действительно ценю любую помощь, которую вы можете предоставить.

Работает так

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.roll_button)
        rollButton.text = "Let's Roll"
    }

}

, но я получаю сообщение об ошибке, когда помещаю его после создания: объявление ожидаемого члена;

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


    }
    val rollButton: Button = findViewById(R.id.roll_button)
    rollButton.text = "Let's Roll"
}

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

В файлах kotlin (.kt) ваш код должен быть внутри функции (обычно основной).В разработке для Android это означает, что обычно ваш код будет внутри методов, таких как onCreate из действия, но другие методы из классов или функций верхнего уровня (вне класса) также работают.

В вашем примерекод, который вы переместили за пределы onCreate, включает в себя объявление значения val rollButton: Button = findViewById(R.id.roll_button), которое действует внутри тела класса, поскольку оно будет превращено в свойство указанного класса.Но вторая строка: rollButton.text = "Let's Roll" - это назначение, которое может быть выполнено только внутри функции.

Кроме того, в Android с kotlin у вас есть доступные расширения для Android kotlin , которые позволяют вам ссылаться на представления.из XML напрямую используя их идентификатор без необходимости использования findViewById

0 голосов
/ 05 апреля 2019

Один из лучших способов его построения.

сначала: добавить OnClick для кнопки в файле XML:

android:OnClick="OnClick"

секунда: построить функцию Onclick в классе MainActivity и не забыть конструктор (v: View):

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}


fun OnClick(v:View){
    val rollButton: Button = findViewById(R.id.roll_button)
    rollButton.text = "Let's Roll"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...