코드네임 :
📱 모바일프로그래밍 - 양방향 데이터 전달하기 📱 본문
New 로 subActivity 생성
startActivity(intent)는 단방향 데이터이다
양방향으로는 못하나?? = 있음!
ActivityResultlaucher를 사용한다!
코드는 Example 6_1_2코드들 (주석달린거)
public class MainActivity extends AppCompatActivity {
//launcher는 ActivityResultLauncher라는 타입의 변수입니다.
//이 변수는 액티비티를 호출하고 결과를 받아오는 데 사용하는 도구
ActivityResultLauncher<Intent> launcer;
~onCreate(){
btnNewActivity.setOnClickListener(new View.OnClickListener() { //익명객체 new ~
@Override
public void onClick(View view) {
//Intent 생성:
//Intent는 MainActivity에서 SubActivity로 화면을 전환하기 위한 객체입니다.
//MainActivity.this는 현재 컨텍스트, SubActivity.class는 대상 액티비티입니다.
Intent intent = new Intent(MainActivity.this, SubActivity.class); //MainActivity에서 SubActivity로 넘어갈껍니다
intent.putExtra("name", editText.getText().toString()); //가져온 에딧텍스트의 텍스트 타입을 스트링 타입으로
intent.putExtra("age", Integer.valueOf(editText2.getText().toString()));
//startActivity(intent); : 단방향
launcher.launch(intent); // 양방향
}
});
//**registerForActivityResult(...)**는:
//새로운 런처 객체를 만듭니다.
//이 런처 객체는 다음을 기억합니다:
//어떤 액티비티를 실행할지
//결과를 어떻게 처리할지
//만들어진 런처 객체를 **반환(돌려줌)**합니다.
//launcher =:
//만들어진 런처 객체를 launcher 변수에 저장합니다.
//이렇게 저장해두면, 나중에 launcher.launch(intent) 같은 방식으로 런처를 사용할 수 있습니다.
//= (대입 연산자): registerForActivityResult 메서드의 반환값을 launcher 변수에 저장하라는 뜻입니다.
//registerForActivityResult : 다른 액티비티를 실행하고, 그 결과를 처리할 때 사용되는 메서드
//ActivityResultContracts.StartActivityForResult(): 호출된 액티비티가 종료될 때 결과 코드와 데이터가 반환됩니다.
//ActivityResultCallback: 이 콜백 함수는 다른 액티비티가 종료될 때 호출
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult o) {
if(o.getResultCode() == RESULT_OK) { // o.getResultCode()로 결과 코드를 확인하고, RESULT_OK인 경우에만 이후 작업을 수행하도록
Intent data = o.getData(); // o.getData() :Sub 액티비티에서 전달된 인텐트(Intent) 객체를 가져옴
String result = data.getStringExtra("result"); //getStringExtra("result")를 사용해 **“result”**라는 키에 저장된 문자열 데이터를 가져옴
Toast.makeText(MainActivity.this, "결과 : " + result, Toast.LENGTH_SHORT).show();
}
}
});
}
}
SubActivity.
//onCreate() 내부
Button btnReturn = findViewById(R.id.btnReturn); //파인드뷰바이아이디로 아이디 연결하는거
TextView textView = findViewById(R.id.textView);
TextView textView2 = findViewById(R.id.textView2);
Intent intent2 = getIntent();
String strName = intent2.getStringExtra("name");
textView.setText(strName);
int num = intent2.getIntExtra("age", 0);
textView2.setText(String.valueOf(num));
btnReturn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 1. 인텐트를 생성
Intent outIntent = new Intent(getApplicationContext(), MainActivity.class);
//Intent 객체를 생성하여 현재 액티비티의 데이터를 MainActivity에 전달할 준비
// getApplicationContext()는 현재 애플리케이션의 전체 컨텍스트를 가져오는 메서드
// 2. 데이터 전달 설정
outIntent.putExtra("result", strName); // putExtra 메서드를 사용해 “result”라는 키에 strName 값을 담음
// strName은 전달하려는 실제 데이터(값)입니다.
//이로써 MainActivity는 "result"라는 이름표로 데이터를 받을 수 있습니다.
// 3. 결과 설정
setResult(RESULT_OK, outIntent); // setResult 메서드를 사용해 결과 코드와 데이터를 설정,
// RESULT_OK는 정상적으로 처리되었음을 의미하는 결과 코드
// outIntent 인텐트에 담긴 데이터가 호출한 액티비티로 전달됨
// 4. 액티비티 종료
finish(); //액티비티 종료
}
});
'백엔드 > Android_JAVA' 카테고리의 다른 글
📱 모바일프로그래밍 - 액티비티 생명주기 📱 (0) | 2024.11.12 |
---|---|
📱 모바일프로그래밍 - 암시적 인텐트📱 (0) | 2024.11.12 |
📱 모바일프로그래밍 - (중간- 코드 ) 모르는거 정리 7 📱 (0) | 2024.10.24 |
📱 모바일프로그래밍 - (중간) 모르는거 정리 6 📱 (0) | 2024.10.24 |
📱 모바일프로그래밍 - (중간-AlertDialog3 x 그냥 여따 코드) 모르는거 정리 5 📱 (0) | 2024.10.24 |