package com.minui.data;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText editEmail;
EditText editName;
EditText editAge;
Button button;
// 내가 실행한 액티비티로 부터, 데이터를 가져와서 처리하는 코드
ActivityResultLauncher<Intent> startActivityResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
// result 에는 resultCode가 있다.
// resultCode의 값으로, 여러가지 구성해서 사용이 가능하다
if (result.getResultCode() == 0) {
int age = result.getData().getIntExtra("age", 0);
editAge.setText("" + age);
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editEmail = findViewById(R.id.editEmail);
editName = findViewById(R.id.editAge);
editAge = findViewById(R.id.editAge);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = editEmail.getText().toString().trim();
String name = editName.getText().toString().trim();
String ageStr = editAge.getText().toString().trim();
int age = Integer.valueOf(ageStr).intValue();
double hiddenData = 3.1414;
// 새로운 액티비티를 띄우고,
// 데이터를 전달한다.
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("email",email);
intent.putExtra("name", name);
intent.putExtra("age", age);
intent.putExtra("hidden", hiddenData);
// 데이터만 전달하는 경우
// startActivity(intent);
// 실행한 액티비티로부터 데이터를 받아오는 것이 있는 경우
startActivityResult.launch(intent);
}
});
}
}
package com.minui.data;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
TextView txtEmail;
TextView txtName;
EditText editAge;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// 넘어오는 데이터가 있으면 처리해 준다.
String email = getIntent().getStringExtra("email");
String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);
double hiddenData = getIntent().getDoubleExtra("hidden", 0);
// 화면과 연결
txtEmail = findViewById(R.id.txtEmail);
txtName = findViewById(R.id.txtName);
editAge = findViewById(R.id.editAge);
button = findViewById(R.id.button);
// 데이터를 화면에 셋팅!!!!
txtEmail.setText(email);
txtName.setText(name);
editAge.setText(age + "");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 1. 수정한 나이 데이터를 가져온다.
String ageStr = editAge.getText().toString().trim();
int age = Integer.valueOf(ageStr).intValue();
// 2. 이 나이 데이터를 MainActivity에 전달한다.
Intent intent = new Intent();
intent.putExtra("age", age);
setResult(0, intent);
// 3. 이 액티비티는 종료한다.
finish();
}
});
}
}
ActivityResultLauncher를 설정해주고 코드와 데이터를 받는다.
데이터를 전해줄 쪽에서는 인텐트 객체에 putExtra를 넣고 setResult한다음 종료한다.
'안드로이드' 카테고리의 다른 글
안드로이드 sqlite3 SQLiteOpenHelper (0) | 2022.07.14 |
---|---|
안드로이드 SharedPreferences를 이용한 데이터 저장과 불러오기 (0) | 2022.07.13 |
안드로이드 액티비티 간의 단방향 데이터 전달 (0) | 2022.07.13 |
안드로이드 이메일 형식 체크 (0) | 2022.07.13 |
안드로이드 액태비티간의 화면 전환 법 (0) | 2022.07.13 |