Get Result From Other Activity - Android Studio - Compose
How To Get Result From Another Activity Using the registerForActivityResult?
In this tutorial, we will learn how to retrieve results from another activity using registerForActivityResult. You may be aware of using the method startActivityForResult, which is now deprecated. So we will use the newer way, which is registerForActivityResult.
We will create 2 Activities: the MainActivity and the FormActivity. From the MainActivity, we will launch the FormActivity to input some data and get that data back as a result to the MainActivity.
Code:
MainActivity.kt
package com.technifysoft.myapplication import android.app.Activity import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.technifysoft.myapplication.ui.theme.MyApplicationTheme /** * MainActivityCompose is the main activity of the application, responsible for setting up the UI. */ class MainActivityCompose : ComponentActivity() { /** * Called when the activity is first created. This is where you should do all of your normal static set up: * create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity's * previously frozen state, if there was one. */ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApplicationTheme { Scaffold( modifier = Modifier.fillMaxSize(), ) { innerPadding -> MainUi(innerPadding) } } } } } @Composable fun MainUi(innerPadding: PaddingValues) { val TAG = "PERMISSIONS_TAG" val context = LocalContext.current var name by remember { mutableStateOf("") } var email by remember { mutableStateOf("") } // launcher for FormActivity val launcher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult() ) { result -> if (result.resultCode == Activity.RESULT_OK) { val data = result.data name = data?.getStringExtra("name") ?: "" email = data?.getStringExtra("email") ?: "" Toast.makeText(context, "$name\n$email", Toast.LENGTH_SHORT).show() } else { Toast.makeText(context, "Cancelled...", Toast.LENGTH_SHORT).show() } } // UI Column( modifier = Modifier .fillMaxSize() .padding(20.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Button(onClick = { val intent = Intent(context, FormActivity::class.java) launcher.launch(intent) }) { Text("Add User") } Spacer(modifier = Modifier.height(20.dp)) Text(text = name, style = MaterialTheme.typography.titleMedium) Text(text = email, style = MaterialTheme.typography.titleMedium) } } /** * GreetingPreview is a composable function for previewing the MainUI in Android Studio. * It is annotated with @Preview to enable live preview. * */ @Preview(showBackground = true) @Composable fun GreetingPreview() { MyApplicationTheme { MainUi(PaddingValues()) } }
FormActivity.kt
package com.technifysoft.myapplication import android.app.Activity import android.content.Intent import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.LocalActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.technifysoft.myapplication.ui.theme.MyApplicationTheme class FormActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { MyApplicationTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> FormUI( modifier = Modifier.padding(innerPadding) ) } } } } } @Composable fun FormUI(modifier: Modifier = Modifier) { val activity = LocalActivity.current as Activity var name by remember { mutableStateOf("") } var email by remember { mutableStateOf("") } Column( modifier = Modifier .fillMaxSize() .padding(20.dp), verticalArrangement = Arrangement.Center ) { OutlinedTextField( value = name, onValueChange = { name = it }, label = { Text("Name") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(10.dp)) OutlinedTextField( value = email, onValueChange = { email = it }, label = { Text("Email") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(20.dp)) Button( onClick = { val resultIntent = Intent().apply { putExtra("name", name) putExtra("email", email) } activity.setResult(Activity.RESULT_OK, resultIntent) activity.finish() }, modifier = Modifier.align(Alignment.CenterHorizontally) ) { Text("Submit") } } } @Preview(showBackground = true) @Composable fun GreetingPreview2() { MyApplicationTheme { FormUI(modifier = Modifier.fillMaxSize()) } }
Screenshots:
![]() |
Get Result From Other Activity - Android Studio - Compose |
Comments
Post a Comment