Android:将数据发送回MainActivity

我有3个活动:Main – > Drink – > Drinkalcohol我按照顺序移动它们,但我想从DrinkAlcohol中得到结果并将它们发送到Main。

在DrinkAlcohol中,我正在使用SetResult,并在Main中使用onActivityResult 。 但是我被困在DrinkAlcohol页面,我做错了什么?

DrinkAlcohol XML按钮

 

DrinkAlcohol gotoMainfunction:

 fun gotoMain(view: View){ val radioButtonID = mRg?.checkedRadioButtonId val rb = findViewById(radioButtonID!!) val checkedValue = rb.text.toString().replace("%","").toDouble() val asu = mSize*checkedValue/60 logDrink(asu) val intent = Intent(this, MainActivity::class.java) val returnIntent = this.intent returnIntent.putExtra("asu", asu) setResult(Activity.RESULT_OK, returnIntent) } 

MainActivity接收代码:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == RETURN_DRINK_ACTIVITY) { if (resultCode == Activity.RESULT_OK) { val asu:Double = data!!.extras.get("asu").toString().toDouble() updateDailyDrinks(asu) updateDailyBudget(asu) updateWeeklyBudget(asu) updateBAC(asu) } } } 

我希望能得到MainActivity页面,这将启动一组敬酒,但是我实际上什么都没有,只剩下DrinkAlcohol页面(Activity)。

我错过了什么?

代码叫DrinkAlcohol:

 fun getDrinkSize(view: View){ val size: Double = view.getTag().toString().toDouble() Toast.makeText(this, "The Drink is $size", Toast.LENGTH_LONG).show() var intent = Intent(this,DrinkAlcoholActivity::class.java ) intent.putExtra("size", size) startActivity(intent) } 

setResult()不会将您移动到其他任何活动。

而不是setResult(Activity.RESULT_OK, returnIntent)你应该这样做

 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);// If an instance of this Activity already exists, then it will be moved to the front. If an instance does NOT exist, a new instance will be created. startActivity(intent); 

并在你的MainActivity onCreate()你做

 Bundle bundle= getIntent().getExtras(); if(bundle !=null){ // get your data here } 

你不需要onActivityResult() 。 代码是在java中,因为我不知道kotlin,对不起:)

我看到你的错误,你需要调用startActivityForResult(intent, request_code)而不是startActivity(intent)来获得onActivityResult方法中的响应:

试试这个:

 fun getDrinkSize(view: View){ val size: Double = view.getTag().toString().toDouble() Toast.makeText(this, "The Drink is $size", Toast.LENGTH_LONG).show() var intent = Intent(this,DrinkAlcoholActivity::class.java ) intent.putExtra("size", size) startActivityForResult(intent,RETURN_DRINK_ACTIVITY) }