Передать параметр из onCreate в onClick - PullRequest
0 голосов
/ 18 февраля 2019

Вот моя активность kotlin / android:

import kotlinx.android.synthetic.main.activity_player_details.*

class PlayerDetails : AppCompatActivity(), View.OnClickListener {

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

        val intent = getIntent()
        val numOfPlayers = intent.getIntExtra("number_of_players", 1)    
        next_details.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        for (player in 1..numOfPlayers) {
            // body in here

        }
    }

}

Я хочу передать значение numOfPlayers в мой onClick метод, чтобы я мог его использовать - как мне этого добиться?

Ответы [ 4 ]

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

Сделать глобальным numOfPlayers var numOfPlayers =0

В onCreate()

val intent = getIntent()
numOfPlayers = intent.getIntExtra("number_of_players", 1)

В onClick ()

for (i in 1..numOfPlayers) {
            // body in here

        }
0 голосов
/ 18 февраля 2019

Либо сделайте numOfPlayer глобальной переменной, либо создайте отдельную функцию для вызова при нажатии btn и передайте numOfPlayer в качестве параметра

1.сделать numOfPlayer глобальной переменной

class PlayerDetails : AppCompatActivity(), View.OnClickListener {
    var numOfPlayers = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_player_details)

        val intent = getIntent()
        numOfPlayers = intent.getIntExtra("number_of_players", 1)
        next_details.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        for (player in 1..numOfPlayers) {
            // body in here
        }
    }
}

2.создать отдельную функцию для вызова при нажатии btn и передать numOfPlayer в качестве параметра

class PlayerDetails : AppCompatActivity(), View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_player_details)
        val intent = getIntent()
        val numOfPlayers = intent.getIntExtra("number_of_players", 1)
        bottomNav.setOnClickListener {
            onNextClick(numOfPlayers)
        }
    }

    private fun onNextClick(numOfPlayers: Int) {
        for (player in 1..numOfPlayers) {
            // body in here
        }
    }
}
0 голосов
/ 18 февраля 2019

onCreate вызывается при создании действия, а onClick вызывается при нажатии кнопки next_details, что, безусловно, происходит после onCreate.

Так что сделайте numOfPlayers классомвведите и присвойте ему значение в onCreate, а также добавьте ключевое слово lateinit в numOfPlayers, чтобы вам не нужно было обнулять его.

Код должен выглядеть следующим образом:

import kotlinx.android.synthetic.main.activity_player_details.*

class PlayerDetails : AppCompatActivity(), View.OnClickListener {

    lateinit var numOfPlayers: Integer
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_player_details)

        val intent = getIntent()
        numOfPlayers = intent.getIntExtra("number_of_players", 1)    
        next_details.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        for (player in 1..numOfPlayers) {
            // body in here

        }
    }

}
0 голосов
/ 18 февраля 2019

Определите вашу переменную с глобальной областью действия, как показано ниже

var numOfPlayers = 0

Убедитесь, что вы определили ее выше onCreate() метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...