티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Sending data back to the Main Activity in Android
안드로이드에서 Main Activity로 데이터 보내기
문제 내용
I have two activities: main activity and child activity.
When I press a button in the main activity, the child activity is launched.
저는 메인 액티비티와 자식 액티비티 두 개를 가지고 있습니다.
메인 액티비티에서 버튼을 누르면 자식 액티비티가 실행됩니다.
Now I want to send some data back to the main screen. I used the Bundle class, but it is not working. It throws some runtime exceptions.
이제 데이터를 메인 화면으로 보내고 싶습니다. Bundle 클래스를 사용했지만 작동하지 않습니다. 몇몇 런타임 예외가 발생합니다.
Is there any solution for this?
어떤 해결책이 있을까요?
높은 점수를 받은 Solution
There are a couple of ways to achieve what you want, depending on the circumstances.
상황에 따라 원하는 것을 이룰 수 있는 몇 가지 방법이 있다.
The most common scenario (which is what yours sounds like) is when a child Activity is used to get user input - such as choosing a contact from a list or entering data in a dialog box. In this case, you should use startActivityForResult
to launch your child Activity.
당신의 상황이 일반적인 경우는 자식 액티비티에서 사용자 입력(예: 목록에서 연락처 선택 또는 대화상자에 데이터 입력)을 받는 경우입니다. 이 경우 startActivityForResult를 사용하여 자식 액티비티를 시작해야 합니다.
This provides a pipeline for sending data back to the main Activity using setResult
. The setResult method takes an int result value and an Intent that is passed back to the calling Activity.
이를 통해 setResult를 사용하여 데이터를 메인 액티비티로 전달할 수 있는 파이프 라인을 제공합니다. setResult 메서드는 int 결과 값을 취하고 호출하는 액티비티로 전달되는 Intent를 취합니다.
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
To access the returned data in the calling Activity override onActivityResult
. The requestCode corresponds to the integer passed in the startActivityForResult
call, while the resultCode and data Intent are returned from the child Activity.
호출하는 액티비티에서 반환된 데이터에 액세스하려면 onActivityResult를 재정의해야 합니다. requestCode는 startActivityForResult 호출에서 전달된 정수와 해당되며, resultCode와 data Intent는 자식 액티비티에서 반환됩니다.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}
가장 최근 달린 Solution
UPDATE Mar. 2021
2021년 3월 업데이트
As in Activity v1.2.0 and Fragment v1.3.0, the new Activity Result APIs
have been introduced.
v1.2.0의 Activity 및 v1.3.0의 Fragment에서와 같이 새로운 Activity Result API가 도입되었습니다.
The Activity Result APIs provide components for registering for a result, launching the result, and handling the result once it is dispatched by the system.
Activity Result API는 결과를 등록, 실행 및 처리하는 구성 요소를 제공합니다.
So there is no need of using startActivityForResult
and onActivityResult
anymore.
따라서 startActivityForResult와 onActivityResult을 더 이상 사용할 필요가 없습니다.
In order to use the new API, you need to create an ActivityResultLauncher in your origin Activity, specifying the callback that will be run when the destination Activity finishes and returns the desired data:
새 API를 사용하려면 출발점 Activity에서 ActivityResultLauncher를 만들어 목적지 Activity가 완료되고 원하는 데이터를 반환할 때 실행될 콜백을 지정해야 합니다.
private val intentLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
result.data?.getStringExtra("key1")
result.data?.getStringExtra("key2")
result.data?.getStringExtra("key3")
}
}
and then, launching your intent whenever you need to:
그리고 필요할 때마다 인텐트를 시작하면 됩니다.
intentLauncher.launch(Intent(this, YourActivity::class.java))
And to return data from the destination Activity, you just have to add an intent with the values to return to the setResult()
method:
목적지 Activity에서 데이터를 반환하려면 반환할 값이 포함된 인텐트를 setResult() 메서드에 추가하면 됩니다.
val data = Intent()
data.putExtra("key1", "value1")
data.putExtra("key2", "value2")
data.putExtra("key3", "value3")
setResult(Activity.RESULT_OK, data)
finish()
For any additional information, please refer to Android Documentation
추가 정보는 안드로이드 문서를 참조하세요.
출처 : https://stackoverflow.com/questions/920306/sending-data-back-to-the-main-activity-in-android
'개발 > 안드로이드' 카테고리의 다른 글
AsyncTask deprecated 이후 대안 솔루션 (0) | 2023.02.02 |
---|---|
Spinner에서 선택한 아이템을 위치가 String으로 찾는 방법 (0) | 2023.02.02 |
카메라로 이미지를 캡처하고 액티비티에 표시하기 (0) | 2023.02.01 |
ScrollView 안에 RecyclerView 적용하기 (0) | 2023.02.01 |
특정 호스트가 포함된 url 클릭 시 해당 앱 열기 (0) | 2023.02.01 |