Android 为什么在活动之间发送数据不起作用?
我目前正在使用Kotlin。我试图通过转到另一个活动,即颜色设置活动,来更改主活动中方框的颜色。我的代码没有返回错误,但不起作用。我试着在这一页上阅读不同的结果,但没有人回答我的问题。谢谢你的帮助 mainactivity.ktAndroid 为什么在活动之间发送数据不起作用?,android,kotlin,Android,Kotlin,我目前正在使用Kotlin。我试图通过转到另一个活动,即颜色设置活动,来更改主活动中方框的颜色。我的代码没有返回错误,但不起作用。我试着在这一页上阅读不同的结果,但没有人回答我的问题。谢谢你的帮助 mainactivity.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activit
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button_box = findViewById<Button>(R.id.button_box)
button_box.setOnClickListener {
val intent = Intent(this, boxColor::class.java)
startActivity(intent)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
val returnColor = data!!.getStringExtra("colorName")
val boxColorChoice = when (returnColor) {
"green" -> R.drawable.box_green
"grey" -> R.drawable.box_grey
"lblue" -> R.drawable.box_lblue
"purple" -> R.drawable.box_purple
"red" -> R.drawable.box_red
"white" -> R.drawable.box_white
"yellow" -> R.drawable.box_yellow
else -> R.drawable.box_white
}
button_box.setBackgroundResource(boxColorChoice)
}
}
...
val mRequestCode = 101 //ADD THIS LINE
...
button_box.setOnClickListener {
val intent = Intent(this, boxColor::class.java)
startActivityForResult(intent, mRequestCode) //ADD THIS LINE
}
...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == mRequestCode) { //CHANGE THIS LINE
...
}
}
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val按钮盒=findViewById(R.id.按钮盒)
button_box.setOnClickListener{
val intent=intent(这个,boxColor::class.java)
星触觉(意图)
}
}
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
if(resultCode==RESULT\u OK){
val returnColor=data!!.getStringExtra(“colorName”)
val boxColorChoice=when(返回颜色){
“绿色”->R.drawable.box\u绿色
“灰色”->R.drawable.box\U灰色
“lblue”->R.drawable.box\u lblue
“紫色”->R.drawable.box\u紫色
“红色”->R.drawable.box\U红色
“白色”->R.drawable.box\u白色
“黄色”->R.drawable.box\U黄色
else->R.drawable.box\u白色
}
按钮框。setBackgroundResource(框颜色选择)
}
}
这是boxcolor.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_box_color)
val green = findViewById<Button>(R.id.green_box)
val red = findViewById<Button>(R.id.red_box)
val white = findViewById<Button>(R.id.white_box)
val yellow = findViewById<Button>(R.id.yellow_box)
val grey = findViewById<Button>(R.id.grey_box)
val lblue = findViewById<Button>(R.id.lblue_box)
green.setOnClickListener {
val intent = Intent()
intent.putExtra("colorName", "green")
setResult(Activity.RESULT_OK, intent)
finish()
}
(and the same onclicklistener for all the other colours)
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u box\u颜色)
val green=findViewById(R.id.green_框)
val red=findViewById(R.id.red_框)
val white=findViewById(R.id.white_框)
val yellow=findViewById(R.id.黄色\u框)
val grey=findViewById(R.id.grey_框)
val lblue=findViewById(R.id.lblue\u框)
green.setOnClickListener{
val intent=intent()
intent.putExtra(“颜色名称”、“绿色”)
setResult(Activity.RESULT_OK,intent)
完成()
}
(所有其他颜色的颜色都相同)
我也知道这是一个小问题,但非常感谢您的帮助。我是来自拉贾斯坦邦的14岁男孩,我想成为一名程序员,学习请使用请求代码和startActivityForResult 例如: 私有值RC=101 val intent=intent(这是boxColor::class.java) startActivityForResult(意向,RC)
您需要使用startActivityForResult。您的代码必须更改为: mainactivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button_box = findViewById<Button>(R.id.button_box)
button_box.setOnClickListener {
val intent = Intent(this, boxColor::class.java)
startActivity(intent)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
val returnColor = data!!.getStringExtra("colorName")
val boxColorChoice = when (returnColor) {
"green" -> R.drawable.box_green
"grey" -> R.drawable.box_grey
"lblue" -> R.drawable.box_lblue
"purple" -> R.drawable.box_purple
"red" -> R.drawable.box_red
"white" -> R.drawable.box_white
"yellow" -> R.drawable.box_yellow
else -> R.drawable.box_white
}
button_box.setBackgroundResource(boxColorChoice)
}
}
...
val mRequestCode = 101 //ADD THIS LINE
...
button_box.setOnClickListener {
val intent = Intent(this, boxColor::class.java)
startActivityForResult(intent, mRequestCode) //ADD THIS LINE
}
...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == mRequestCode) { //CHANGE THIS LINE
...
}
}
在您的boxcolor.kt中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_box_color)
val mRequestCode = 101 //ADD THIS LINE
...
green.setOnClickListener {
val intent = Intent()
intent.putExtra("colorName", "green")
setResult(mRequestCode, intent) //CHANGE THIS LINE
finish()
}
(and the same onclicklistener for all the other colours)
请注意,不要在文件
main Activity.kt
中使用Activity.RESULT\u OK作为请求代码在单击事件中,您启动的活动类似于:startActivity(intent)
。如果您希望新活动返回结果,则应类似于:startActivityForResult(intent,RESULT\u code)启动活动;
。查看本教程: