2. 액티비티 간의 양방향 데이터 전달방법
안드로이드 개발에서는 두 개의 액티비티 간에 데이터를 주고받는 양방향 데이터 전달이 필요할 때가 있다. 이 섹션에서는 MainActivity
에서 SecondActivity
로 데이터를 전달하고, SecondActivity
에서 처리된 결과를 다시 MainActivity
로 반환받는 방법을 설명한다. 예제에서는 사용자가 입력한 나이를 10년 더한 값을 반환받아 화면에 표시하는 방법을 다룬다.
MainActivity.java
package com.kks.lifecycle;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
Button button;
EditText editName;
EditText editAge;
TextView txtAge;
ActivityResultLauncher launcher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
if (data != null) {
int age = data.getIntExtra("age", 0);
txtAge.setText("10년 후 나이는 " + age + "세");
}
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
editName = findViewById(R.id.editName);
editAge = findViewById(R.id.editAge);
txtAge = findViewById(R.id.txtAge);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editName.getText().toString().trim();
String strAge = editAge.getText().toString().trim();
int age = Integer.parseInt(strAge);
// Intent를 생성하여 데이터를 SecondActivity로 전달한다
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name", name);
intent.putExtra("age", age);
launcher.launch(intent);
}
});
}
}
주요 코드 설명:
ActivityResultLauncher<Intent> launcher
-ActivityResultLauncher
를 사용하여 결과를 받을 준비를 한다.launcher.launch(intent);
-SecondActivity
를 시작하고 결과를 기다린다.if (result.getResultCode() == Activity.RESULT_OK)
- 결과가 성공적으로 반환되었는지 확인한다.int age = data.getIntExtra("age", 0);
-SecondActivity
에서 반환된 데이터를 받는다.txtAge.setText("10년 후 나이는 " + age + "세");
- 받은 데이터를 화면에 표시한다.
SecondActivity.java
package com.kks.lifecycle;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
TextView txtName;
TextView txtAge;
int age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
txtName = findViewById(R.id.txtName);
txtAge = findViewById(R.id.txtAge);
// MainActivity로부터 전달받은 데이터를 받는다
String name = getIntent().getStringExtra("name");
age = getIntent().getIntExtra("age", 0);
age = age + 10;
txtName.setText("이름은 " + name);
txtAge.setText("10년 후 나이는 " + age + "세");
}
@Override
public void onBackPressed() {
// 데이터를 반환한다
Intent resultIntent = new Intent();
resultIntent.putExtra("age", age);
setResult(Activity.RESULT_OK, resultIntent);
super.onBackPressed();
}
}
주요 코드 설명:
age = age + 10;
- 받은 나이에 10을 더한다.Intent resultIntent = new Intent();
- 반환할 데이터를 담을 인텐트를 생성한다.resultIntent.putExtra("age", age);
- 데이터를 인텐트에 추가한다.setResult(Activity.RESULT_OK, resultIntent);
- 결과를 설정한다.super.onBackPressed();
- 뒤로가기 버튼을 눌렀을 때의 기본 동작을 실행한다.
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오]SharedPreferences를 활용한 사용자 데이터 저장 및 관리 (0) | 2024.06.10 |
---|---|
[안드로이드 스튜디오]액티비티 간의 백버튼 누를 때 데이터 전달 방법 (0) | 2024.06.07 |
[안드로이드 스튜디오]액티비티 간의 단반향 데이터 전달방법 (0) | 2024.06.07 |
[안드로이드 스튜디오]퀴즈앱 로직개발(AlertDialog 활용) (0) | 2024.06.06 |
[안드로이드 스튜디오]퀴즈앱 화면개발(progrss Bar 활용) (0) | 2024.06.06 |