단방향 데이터 전달
1. 다른 액티비티에게 데이터 전달하는 코드
1) Intent 객체 생성
- 객체 생성시 지금의 액티비티(this)와 대상이 될 액티비티(class)를 설정
2) putExtra("key", value) : 메소드에 키와 밸류 데이터 입력
3) startActivity : 액티비티 간의 화면 전환(단방향 데이터 전달일 때 사용)
// MainActivity
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("dataKey", dataValue);
startActivity(intent);
2. 다른 액티비티로부터 데이터를 전달 받는 코드
1) getIntent().getStringExtra("key") : 메소드에 키 데이터 입력
- 주의 : 전달 받는 데이터타입에 맞춰야 함. 정수형일 경우 getIntExtra();
// OtherActivity
String getData = getIntent().getStringExtra("dataKey");
양방향 데이터 전달
1. Back 버튼을 눌렀을 때 데이터를 전달하는 액티비티의 코드
// Back 버튼 눌렀을때의 이벤트 처리 방법
@Override
public void onBackPressed() {
Log.i("LifeCycleApp",
"두번째 액티비티의 onBackPressed 함수 실행");
// 10년후의 나이를 메인액티비티로 전달!!!
Intent intent = new Intent();
intent.putExtra("age10", age);
// 돌려줄때는 startActivity 가 아니라, setResult 함수 이용
setResult(0, intent);
// 프레임워크가 할일 하라는 코드.
super.onBackPressed();
}
2. Back 버튼을 눌렀을 때 데이터를 전달받는 액티비티의 코드
// 내가 실행한 액티비티로부터, 데이터를 다시 받아오는 경우에 작성하는 코드
ActivityResultLauncher<Intent> launcher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == 0){
int age10 = result.getData().getIntExtra("age10", 0);
txtAge.setText(""+age10);
}
}
});
액티비티 간의 화면전환(양방향 데이터 전달일 때 사용)
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("dataKey", dataValue);
launcher.launch(intent);
전체 코드
MainActivity 클래스
package com.reodinas2.lifecycle;
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;
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;
public class MainActivity extends AppCompatActivity {
Button button;
EditText editName;
EditText editAge;
TextView txtAge;
// 내가 실행한 액티비티로부터, 데이터를 다시 받아오는 경우에 작성하는 코드
ActivityResultLauncher<Intent> launcher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == 0){
int age10 = result.getData().getIntExtra("age10", 0);
txtAge.setText(""+age10);
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("LifeCycleApp", "onCreate 함수 실행");
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 view) {
String name = editName.getText().toString().trim();
String strAge = editAge.getText().toString().trim();
int age = Integer.valueOf(strAge).intValue();
// 두번째 액티비티를 실행시키는 코드 작성.
// 인텐트를 만든다!
// 인텐트란, 어떤 액티비티가, 어떤 액티비티를 띄우겠다 라는것.
Intent intent = new Intent(MainActivity.this, SecondActivity.class );
// 새로운 액티비티에 전달할 데이터를 셋팅한다.
// key, value 로 데이터 셋팅!
intent.putExtra("name", name);
intent.putExtra("age", age);
// 아래 startActivity 함수는 단방향 데이터 전달할때만 사용
// startActivity(intent);
// 양방향 데이터 전달할때는
launcher.launch(intent);
}
});
}
SecondActivity 클래스
package com.reodinas2.lifecycle;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
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);
Log.i("LifeCycleApp", "두번째 액티비티의 onCreate 함수 실행");
txtName = findViewById(R.id.txtName);
txtAge = findViewById(R.id.txtAge);
// 이 액티비티를 실행한 액티비티로부터 데이터를 받아오는 코드
// 인텐트를 가져오고, 그 인텐트에 들어있는 키값으로 데이터를 받아온다.
String name = getIntent().getStringExtra("name");
// 위 코드는 아래 주석 두줄을 한줄로 표현한 것
// Intent intent = getIntent();
// String name2 = intent.getStringExtra("name");
age = getIntent().getIntExtra("age", 0);
txtName.setText(name);
age = age + 10;
txtAge.setText(age + "");
}
// Back 버튼 눌렀을때의 이벤트 처리 방법
@Override
public void onBackPressed() {
Log.i("LifeCycleApp",
"두번째 액티비티의 onBackPressed 함수 실행");
// 10년후의 나이를 메인액티비티로 전달!!!
Intent intent = new Intent();
intent.putExtra("age10", age);
// 돌려줄때는 startActivity 가 아니라, setResult 함수 이용
setResult(0, intent);
// 프레임워크가 할일 하라는 코드.
super.onBackPressed();
}
실행 결과
1. 버튼을 눌러서 이름과 나이 전달
2. 이름과 나이를 전달받아서 이름과 10년 후의 나이 출력
3. 백 버튼을 눌렀을 때 10년 후의 나이를 전달 받아서 출력
'Android' 카테고리의 다른 글
Android Studio - 간단한 유효성 검사(이메일주소, 전화번호, 웹URL, IP주소) (0) | 2023.01.31 |
---|---|
Android Studio - SharedPreferences 를 이용해 앱 내에 데이터 저장, 불러오기 (0) | 2023.01.31 |
Android Studio - Activity Life Cycle(액티비티 수명 주기) (0) | 2023.01.30 |
Android Studio - AlertDialog 사용법 (0) | 2023.01.27 |
Android Studio - ProgressBar 사용법 (0) | 2023.01.27 |