Programing

startActivityForResult를 사용하여 자식 활동에서 requestCode를 얻는 방법은 무엇입니까?

lottogame 2020. 10. 10. 09:27
반응형

startActivityForResult를 사용하여 자식 활동에서 requestCode를 얻는 방법은 무엇입니까?


A, B, C 및 D의 네 가지 활동이 있습니다. 제 상황은 A가 startActivityForResult에 의해 활동 B를 시작한다는 것입니다.

startActivityForResult(new Intent(this,B.class),ONE);

다른 상황에서는 다른 상황에서 B를 할 것입니다. 처럼

 startActivityForResult(new Intent(this,B.class),TWO);

B에서는 requestCode에 따라 C 또는 D를 호출해야합니다. 즉, ONE이 C를 시작해야하고 D를 시작해야한다면
자식 Activity (여기 B)에서 requestCode를 확인하는 방법을 알아야합니다.
즉, B 활동이 시작된 요청 코드를 얻고 싶습니다.


추가로 요청 코드를 전달할 수 있습니다.

intent.putExtra("requestCode", requestCode);   

당신이 사용하는 경우 또는 startActivityForResult각을 편집하는 것보다 더 나은 다음 여러 번, 당신은 할 수 당신의에서 이 같은 당신에게 코드가 추가overridestartActivityForResultActivity

@Override
    public void startActivityForResult(Intent intent, int requestCode) {
        intent.putExtra("requestCode", requestCode);
        super.startActivityForResult(intent, requestCode);
    }

그래서 모든에 startActivityForResult 편집 할 필요가 없습니다
당신을 도와 희망


요청 코드는이 값을 알 필요가없고 알 필요가 없기 때문에 시작된 활동에 자동으로 전달되지 않습니다. 시작 위치가 아니라 무엇을해야하는지 알면됩니다.

활동을 시작하는 것은 실제로 메서드를 호출하는 또 다른 형태입니다. 메서드를 호출하면 결과가 동 기적으로 수신됩니다 (호출 한 위치에서 바로). 이 경우 메서드가 작업을 수행하는 데 필요한 정보 만 전달합니다. 어디에서 전화했는지 말하지 않습니다.

활동을 시작하는 것은 메서드를 호출하는 비동기식 아날로그이며,이 경우 특수 메서드 onActivityResult ()에서 결과를받습니다. 이 방법에서는 방금받은 결과로 무엇을해야하는지 알아야하며 이에 대한 요청 코드가 있어야합니다.

요청 코드를 매개 변수로 전달하는 것이 좋은 생각이 아닌 이유를 좀 더 명확히하기 위해 구매할 수있는 제품을 보여주는 예제 활동을 고려하십시오. 이 활동에는 "구매"및 "로그인"이라는 레이블이 붙은 두 개의 버튼이 있습니다 (현재 로그인하지 않았으므로). "로그인"을 누르면 제공된 정보를 사용하여 사용자 로그인을 시도하는 "로그인"이라는 활동이 시작됩니다. "구매"를 누르면 먼저 동일한 "로그인"활동이 시작되고 로그인이 성공한 경우 구매 활동이 시작됩니다.

이제 "로그인"버튼은 요청 코드 1을 사용하여 로그인 활동을 시작하지만 "구매"버튼은 로그인이 성공하면 다른 작업을 수행해야하므로 동일한 요청 코드를 사용할 수 없습니다. 따라서 "구매"버튼은 요청 코드 2를 사용합니다.

"로그인"활동에서 호출 된 위치에 따라 두 개의 서로 다른 요청 코드를 수신 할 수 있지만 동일한 절차를 수행해야합니다.

따라서 요청 코드를 매개 변수로 전달하면 다음과 같이 몇 가지 다른 요청 코드에 대해 동일한 작업을 수행해야하는 코드가 생성됩니다.

if (requestCode == LOGIN || requestCode == BUY) {
    // ...
} else ...

또한 RequestCodes라는 클래스와 같은 중앙 위치에 요청 코드 상수를 저장하게됩니다.

요컨대 요청 코드는 수신 된 결과로 무엇을할지 결정하는 데만 사용해야합니다. 이렇게하면 더 모듈화되고 유지 관리 및 코드 확장이 더 쉬워집니다.


사용자 지정 의도 작업을 사용하여 이러한 종류의 정보를 시작하는 활동에 전달했습니다.

protected static final String ACTION_DO_C = "do_c";
protected static final String ACTION_DO_D = "do_d";

그런 다음 다음과 같이 할 것입니다.

final Intent intent = new Intent(this,B.class)
intent.setAction(ACTION_DO_C);
startActivityForResult(intent,ONE);

그리고 Activity에서 B쉽게 작업을 수행 할 수 있습니다.

getIntent().getAction();

getCallingActivity ()를 사용하여 현재 활동을 시작하고 끝에 응답 코드가있는 결과 값을 수신하는 활동을 가져올 수 있습니다.

참고 URL : https://stackoverflow.com/questions/5104269/using-startactivityforresult-how-to-get-requestcode-in-child-activity

반응형