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) }