Android: envío de datos a MainActivity

Tengo 3 actividades: Principal -> Bebida -> BebidaAlcohol Me muevo por ellas en ese order, pero quiero tomar los resultados de DrinkAlcohol y enviarlos a Main.

En DrinkAlcohol estoy usando SetResult y en Main estoy usando onActivityResult . Pero estoy atrapado en la página de DrinkAlcohol, ¿qué estoy haciendo mal?

Botón XML DrinkAlcohol

<android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:layout_marginEnd="24dp" android:clickable="true" android:onClick="gotoMain" app:srcCompat="@drawable/ic_home_black_24dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> 

Función DrinkAlcohol gotoMain:

 fun gotoMain(view: View){ val radioButtonID = mRg?.checkedRadioButtonId val rb = findViewById<RadioButton>(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) } 

Código de recepción de actividad principal:

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

Esperaría get la Página de Actividad Principal que desencadenaría un set de Tostadas, pero en realidad no recibo nada, solo permanezco en la Página de DrinkAlcohol (Actividad).

¿Qué me estoy perdiendo?

Código que llama a 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() no lo mueve a ninguna otra actividad.

En lugar de setResult(Activity.RESULT_OK, returnIntent) deberías hacer esto

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

Y en tu MainActivity onCreate() lo haces

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

No necesitas onActivityResult() . El código está en Java porque no sé kotlin, lo siento 🙂

Veo su error, necesita llamar a startActivityForResult(intent, request_code) lugar de startActivity(intent) para recibir la respuesta en el método onActivityResult :

Prueba con esto:

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