Android : 활동을 호출하는 활동에 결과를 반환하는 방법은 무엇입니까?


128

나는이 Location같은 많은 활동에서 호출 할 수있는 활동 Sign upOrder. 에서 Location활동이 있도록 활동 사용자는 자신의 위치를 입력 Location라고 불렀다 그 활동이 새로운 위치를 반환합니다.

따라서 Sign up활동 이 활동을 호출 할 때 활동 Location에 데이터를 반환해야합니다 Sign up. 다른 시간에는 Order활동이 동일한 작업을 수행합니다.

노트

나는 당신이 코드를 게시해야한다고 말할 것이라는 것을 압니다. 그러나 나는 당신에게 코드를 요청하는 것이 아닙니다. 나는 단지 몇 가지 팁, 링크 또는 좋은 스레드를 원합니다.


당신은 뒷면에 마무리 () 호출을 사용 할 수 있습니다 ..
Harshid

1
StartActivityForResult를 확인하셨습니까? developer.android.com/reference/android/app/Activity.html
vinaykumar 2013

@Harshid 좀 더 자세한 내용을 알려주시겠습니까, 아니면 감사 할만한 링크가 있다면
user user

답변:


253

호출 활동에 결과를 반환해야하는 활동을 시작하려면 다음과 같이해야합니다. 시작한 활동에서 결과를 얻었음을 식별하려면 아래와 같이 요청 코드를 전달해야합니다.

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

활동에서 setData()결과를 반환하는 데 사용할 수 있습니다.

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

그런 다음 다시 첫 번째 활동에서 onActivityResult ()에 아래 코드를 작성합니다.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

귀하의 의견에 따라 편집 : 세 개의 문자열을 반환하려면 Uri를 사용하는 대신 인 텐트로 키 / 값 쌍을 사용하여이를 따르십시오.

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

아래와 같이 onActivityResult 에서 가져 옵니다 .

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

당신은 무엇을 말했습니까? 나는 당신의 마지막 코멘트를 이해하지 못합니다. 죄송합니다. 저는 영어를 잘하지 못합니다. 지금 코드를 시도하고 있습니다. requestcode정수를 넣을 수 있습니까?
사용자 사용자

1
NP (No Problems)라고 말했고, 구현에 늦을 수도 있다고 말씀 하셨듯이, 시간을내어 의견을 주시면 알림을받을 수 있다고 답했습니다. requestcode로 오면 int requestCode = 1과 같은 정수 값을 줄 수 있습니다.
Kanth 2013

네, 맞아요. 대답을 받아들이겠습니다. 감사합니다. 방법이 있으면 감사합니다. 문자열을 보내는 것이 아니라 "도시", "거리", "와 같은 3 개의 문자열을 보내고 싶습니다. home ", 문자열에 레이블을 지정하는 방법이 있습니까?
사용자 사용자

당신의 대답은 매우 훌륭합니다. 원한다면 많은 사용자가 검색 할 수 있도록 제목을 편집하십시오
user user

내가하는 방법을 찾고 있었다 의도를 만들 : new Intent(this, OtherActivity.class);나는 활동이 코드를 사용할 수 있습니다.
사용자

3

완료하고 resultCode(데이터없이) 추가하고 싶다면 setResult(int resultCode)전에 호출 할 수 있습니다 finish().

예를 들면 :

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

그런 다음 호출 활동에서, 확인하여 resultCode괜찮은지 확인하십시오.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

로 활동을 호출하는 것을 잊지 마십시오 startActivityForResult(intent, someCustomRequestCode).


4
의 값 Activity.RESULT_OK은 실제로 -1입니다. Activity상수를 사용하는 것이 좋습니다
jacoballenwood 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.