액티비티간 단방향 데이터 전달 방법
MainActivity
public void onClick(View v) {
String name = editName.getText().toString().trim();
String strAge= editAge.getText().toString().trim();
// 다른 액티비티를 실행시키는 코드
// 인텐트를 만든다.
// 인텐트란, 어떤 엑티비티가 어떤 엑티비티를 띄우겠다 라는 (의도)
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
// 액티비티에 데이터를 전달하는 방법
int age = Integer.parseInt(strAge);
intent.putExtra("name",name);
intent.putExtra("age",age);
startActivity(intent);
}
- Intent intent = new Intent(MainActivity.this, SecondActivity.class);:
- 새로운 인텐트 객체를 생성합니다. 이 인텐트는 현재 액티비티(MainActivity)에서 다른 액티비티(SecondActivity)로 이동할 것임을 나타냅니다.
- MainActivity.this:
- 안드로이드 액티비티 내에서 다른 클래스나 메서드에서 현재 액티비티를 참조할 때 사용합니다.
- this 키워드는 현재 객체를 가리키는 참조를 제공합니다. 여기서 MainActivity는 현재 액티비티를 나타냅니다.
- 따라서 MainActivity.this는 현재 액티비티를 가리키는 참조를 제공하며, 인텐트를 생성하는 데 사용됩니다.
- SecondActivity.class:
- 액티비티 클래스의 객체가 아니라 클래스 자체를 참조하는 것입니다.
- class 키워드는 클래스의 메타데이터를 나타냅니다. SecondActivity.class는 SecondActivity 클래스를 나타내며, 이 클래스의 정보를 인텐트에 전달합니다.
- 이를 통해 안드로이드 시스템이 SecondActivity 클래스를 인식하고 해당 액티비티를 시작할 수 있습니다.
- MainActivity.this:
- 새로운 인텐트 객체를 생성합니다. 이 인텐트는 현재 액티비티(MainActivity)에서 다른 액티비티(SecondActivity)로 이동할 것임을 나타냅니다.
- intent.putExtra("name",name);:
- 생성한 인텐트에 추가 데이터를 넣습니다. 여기서 "name"은 데이터를 식별하는 키이며, name 변수에 저장된 사용자의 이름을 값으로 가집니다. 이것은 두 번째 액티비티로 전달될 것입니다.
- intent.putExtra("age",age);:
- 위와 마찬가지로, "age"라는 키로 사용자의 나이(age 변수)를 추가 데이터로 인텐트에 넣습니다.
- startActivity(intent);:
- 생성된 인텐트를 사용하여 다른 액티비티(SecondActivity)를 시작합니다. 이는 사용자의 입력된 이름과 나이가 포함된 데이터와 함께 해당 액티비티로 전달됩니다.
이렇게 함으로써 인텐트를 사용하여 데이터를 포함한 정보를 다른 액티비티로 전달하고, 해당 액티비티를 시작할 수 있습니다. 이것이 안드로이드에서 데이터를 전달하고 액티비티를 시작하는 가장 일반적인 방법 중 하나입니다.
secondActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.i("LIFE MAIN", "두번째 엑티비티 onCreate 실행");
// 데이터가 넘어온게 있으면, 데이터를 받아준다.
String name=getIntent().getStringExtra("name");
age=getIntent().getIntExtra("age",0);
textName = findViewById(R.id.textName);
textAge = findViewById(R.id.textAge);
age=age+10;
textName.setText("이름은" + name);
textAge.setText("나이는" + age+"세");
백버튼 데이터 전달방법
secondActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.i("LIFE MAIN", "두번째 엑티비티 onCreate 실행");
// 데이터가 넘어온게 있으면, 데이터를 받아준다.
String name=getIntent().getStringExtra("name");
age=getIntent().getIntExtra("age",0);
textName = findViewById(R.id.textName);
textAge = findViewById(R.id.textAge);
age=age+10;
textName.setText("이름은" + name);
textAge.setText("나이는" + age+"세");
// 백버튼 눌렀을때 동작하는 함수
getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
Intent intent = new Intent();
intent.putExtra("age",age);
setResult(1000,intent);
finish();
}
});
MainActivity
public class MainActivity extends AppCompatActivity {
Button button;
TextView textView;
EditText editName;
EditText editAge;
TextView txtAge;
ActivityResultLauncher<Intent> launcher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult o) {
// 내가 실행한 액티비티로 부터 , 데이터를 받아오는 부분
if ( o.getResultCode() == 1000){
int age = o.getData().getIntExtra("age",0);
txtAge.setText("10년후 나이는"+ age + "살");
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("LIFE MAIN", "onCreate 실행");
button= findViewById(R.id.button);
textView = findViewById(R.id.textView);
editAge = findViewById(R.id.editAge);
editName = findViewById(R.id.editName);
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();
// 다른 액티비티를 실행시키는 코드
// 인텐트를 만든다.
// 인텐트란, 어떤 엑티비티가 어떤 엑티비티를 띄우겠다 라는 (의도)
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
// 액티비티에 데이터를 전달하는 방법
int age = Integer.parseInt(strAge);
intent.putExtra("name",name);
intent.putExtra("age",age);
launcher.launch(intent);
// startActivity(intent);
}
코드 바뀐거 주의
launcher.launch(intent);
// startActivity(intent);
위 코드는 ActivityResultLauncher를 사용하여 다른 액티비티로부터 결과를 받아와 처리하는 부분을 담고 있습니다. 여기서 onActivityResult 메서드는 실행 결과를 처리하는 콜백 함수로, 실행 결과를 ActivityResult 객체인 o에 전달받습니다.
if (o.getResultCode() == 1000)는 실행 결과 코드가 1000일 때만 데이터를 처리하는 조건문입니다. 이는 실행한 액티비티에서 특정 결과 코드를 설정하여 반환했을 때만 데이터를 처리하고 화면에 표시합니다.
int age = o.getData().getIntExtra("age", 0);는 실행 결과에서 "age"라는 키로 전달된 데이터를 가져와 정수형으로 변환하는 부분입니다. 만약 데이터가 전달되지 않았거나 형식이 올바르지 않을 경우 기본값으로 0을 사용합니다.
'Aandroid Studio > 기능' 카테고리의 다른 글
[android] RecyclerView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법 (1) | 2024.06.10 |
---|---|
[android] SharedPreferences 를 이용한, 데이터 저장과 불러오기 (0) | 2024.06.07 |
[android] Toast, Snackbar, AlerDialog 팝업창 띄우는 방법 (0) | 2024.06.05 |
[android] 버튼을 클릭하면, 동작하는 코드 setOnClickListener() 함수 (0) | 2024.06.04 |
[android] 앱이름, 아이콘, 바꾸기, 액션바 없애기 (0) | 2024.06.04 |