1. 서론
검색을 해보면 다른 엑티비티에서의 활동에서 결과를 가져오기 위해 과거에 startActivityForResult함수가 이용되는 것을 알 수 있는데 실제로 안드로이드 스튜디오에서 확인해보니 startActivityForResult (deprecated) 라며 새로운 API로 마이그레이션이 필요하다고한다. 그런데 새 API의 설명이 공식 문서와 최근에 올라온 블로그의 글만 가지고는 이해가 어려워 작성하기로했다.
2. 사용법
0. build.gradle에
implementation "androidx.activity:activity:1.2.0-alpha04"
implementation "androidx.fragment:fragment:1.3.0-alpha04"
를 추가해준다.
MainActivity.Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class MainActivity extends AppCompatActivity {
ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if(result.getResultCode() == RESULT_OK) {
Intent intent = result.getData();
Log.d("MainActivity", intent.getStringExtra("result"));
}
}
);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mainButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("key", "value");
mStartForResult.launch(intent);
}
});
}
}
|
cs |
1. 데이터를 받을 엑티비티에서 ActivityResultLauncher mStartForResult를 정의한다. (콜백 함수가 포인트이다)
그리고 새로운 엑티비티를 활성화 할때 startActivity가 아닌 ActivityResultLauncher함수의 launch를 이용하여 엑티비티를 활성화한다.
SubActivity.Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class SubActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
Log.d("SubActivity", "onCreate: "+getIntent().getStringExtra("key"));
findViewById(R.id.subButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SubActivity.this, MainActivity.class);
intent.putExtra("result","resultData");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
|
cs |
2. 데이터를 전송할 엑티비티에서 Intent에 자료를 저장한다.
꼭 setResult를 호출하여 결과를 설정한다.
3. 서브엑티비티 종료후 메인엑티비티로 돌아올시 ActivityResultLauncher로 작성한 콜백함수가 작동하여 필요한 데이터를 가져와 결과를 처리한다.
참고 : https://developer.android.com/training/basics/intents/result?hl=ko
'안드로이드 스튜디오[Android studio]' 카테고리의 다른 글
navigation drawer의 icon색이 바뀌지 않는 문제 해결 (0) | 2021.07.30 |
---|---|
토글 버튼(Toggle Button) 만들기 (0) | 2021.07.09 |
(안드로이드 스튜디오) 연속 클릭 구현 (0) | 2021.07.06 |
엑티비티간 데이터 이동 (0) | 2021.06.24 |
액티비티 전환 시 아무것도 나오지 않을 때 (0) | 2021.06.21 |