В приложении для Android я хочу, чтобы пользователь проверил переключатель, и в зависимости от того, что проверил пользователь, я хочу, чтобы он изменил что-то в следующем действии (например, скрытие кнопки или изменение текста кнопки). Как я это делаю?
Я уже узнал, как изменить текстовое представление в следующем действии, но, вероятно, для этого есть и лучший способ.
val rg1 = findViewById<RadioGroup>(R.id.rg1)
val rb1 = findViewById<RadioButton>(R.id.rb1)
val rb2 = findViewById<RadioButton>(R.id.rb2)
val tv1 = findViewById<TextView>(R.id.tv1)
val btnNext = findViewById<Button>(R.id.btnNext)
rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
when (i) {
R.id.rb1 -> tv1.text = "something"
R.id.rb2 -> tv1.text = "something else"
}
})
btnNext.setOnClickListener {
val result = tv1.text.toString()
val intent = Intent(this, Activity2::class.java)
intent.putExtra("Result", result)
startActivity(intent)
}
tv1.isGone = true
После этого в Activity2:
val result = intent.getStringExtra("Result")
val tv2 = findViewById<TextView>(R.id.tv2)
tv2.text = result
он изменяет tv2 в Activity2 (tv1 предназначен только для получения текстовой строки и не должен отображаться в первом действии, как я уже говорил, возможно, есть и лучшее решение). Но самое главное, что делать, когда я хочу скрыть кнопку или сделать что-то еще в следующем действии в зависимости от переключателей?
Ваш вопрос. Вы уже передаете состояние от одного действия к другому в своих примерах. Ваш вопрос, кажется, относится к тому же, что вы уже делаете. Это неясно.
не уверен, поможет ли мое решение или нет, может быть, да: P
собираюсь добавить кое-что к моему ответу сейчас
не уверен, что это ответ на ваш вопрос или нет, но подумайте об этом:
ты можешь измениться
rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
when (i) {
R.id.rb1 -> tv1.text = "something"
R.id.rb2 -> tv1.text = "something else"
}
})
к чему-то вроде этого
rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
when (i) {
R.id.rb1 -> OneSetupOfYourUI()
R.id.rb2 -> AnotherSetupOfYourUI()
}
})
затем определите, что вы хотите изменить внутри функций, и вызовите эти функции вместо изменения каждого отдельного компонента.
fun OneSetupOfYourUI(){
//change stuff in here
}
Может быть, это помогает?
Затем, когда вы начинаете новую активность:
val result = tv1.text.toString()
val intent = Intent(this, Activity2::class.java)
intent.putExtra("Result", result)
startActivity(intent)
Рассмотрите возможность добавления нескольких утверждений intent.putExtra()
на основе настроенного вами пользовательского интерфейса или того, что выбрал пользователь.
Редактировать
Просто для всех, кто заинтересован или не уверен, вы также можете просто сделать это в заявлении when
:
when (i) {
R.id.rb1 -> {
tv1.text = "something"
etc.
//now you can do several statements here :)
}
}
Я не понимаю вопроса. Вы спрашиваете, правильно ли вы поступили?