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

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

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

노트

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



답변

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

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");
        }
    }
}

답변

완료하고 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).