안드로이드 액티비티 간 데이터 전달 방법

1. 인텐트(Intent) 개념

인텐트는 안드로이드 시스템 컴포넌트 간의 통신 매개체입니다. 액티비티, 서비스, 브로드캐스트 수신기, 콘텐츠 프로바이더 등과 같은 컴포넌트와 운영체제 간의 상호작용을 가능하게 합니다.

인텐트 생성 방법

// Context와 Class 타입 파라미터로 액티비비 지정
public Intent(Context packageContext, Class<?> cls)

Intent launchIntent = new Intent(MainActivity.this, DetailActivity.class);

명시적 인텐트(Explicit Intent)

애플리케이션 내에서 특정 액티비티를 직접 지정하여 시작할 때 사용합니다.

Intent explicitIntent = new Intent(CurrentActivity.class, TargetActivity.class);
startActivity(explicitIntent);

암시적 인텐트(Implicit Intent)

다른 애플리케이션의 액티비티를 시작해야 할 때 사용합니다. 특정 액션과 데이터를 지정하여 시스템이 적절한 컴포넌트를 선택하도록 합니다.

2. 액티비티 시작 및 데이터 전달

부모 액티비티에서 자식 액티비티를 시작하고 데이터를 전달하는 방법입니다.

액티비티 시작

// Intent를 사용하여 액티비티 시작
public void startActivity(Intent intent)

액티비티에서 startActivity()를 호출하면 ActivityManager에 요청이 전달됩니다. ActivityManager는 액티비티 인스턴스를 생성하고 onCreate() 메서드를 호출합니다.

데이터 전달 방법

데이터는 extra 정보로 인텐트에 첨부되어 전달됩니다. 수신 측 액티비티는 인텐트를 통해 이 extra 데이터에 접근하여 값을 가져옵니다.

데이터 추가하기
// name: extra의 이름, value: 전달할 데이터
public Intent putExtra(String name, boolean value)

이 메서드는 여러 데이터 타입을 지원하며, 항상 String 타입의 키와 다양한 타입의 값을 받습니다. 메서드는 인텐트 자체를 반환하므로 메서드 체이닝이 가능합니다.

데이터 가져오기
// name: extra의 이름, defaultValue: 기본값
public boolean getBooleanExtra(String name, boolean defaultValue)

데이터 전달 구현 예시

자식 액티비티에 정적 팩토리 메서드를 구현하여 데이터 전달을 간소화합니다.

// 자식 액티비티 내 정적 메서드
public static Intent newIntent(Context packageContext, boolean answerIsCorrect) {
    Intent intent = new Intent(packageContext, ResultActivity.class);
    intent.putExtra(EXTRA_ANSWER_CORRECT, answerIsCorrect);
    return intent;
}

부모 액티비티에서 자식 액티비티 시작:

boolean answerIsTrue = true;
Intent intent = ResultActivity.newIntent(QuestionActivity.this, answerIsTrue);
startActivity(intent);

자식 액티비티에서 데이터 수신:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);
    
    // 부모 액티비티로부터 전달된 데이터 가져오기
    mAnswerIsCorrect = getIntent().getBooleanExtra(EXTRA_ANSWER_CORRECT, false);
}

3. 자식 액티비티로부터 결과 받기

자식 액티비티에서 결과를 다시 부모 액티비티로 전달하는 방법입니다.

결과 설정

// 결과 코드와 함께 Intent 설정
public void setResult(int resultCode, Intent data)

결과 요청 및 처리

부모 액티비티에서 startActivityForResult()를 사용하여 자식 액티비티를 시작하고, onActivityResult() 콜백을 통해 결과를 처리합니다.

// 자식 액티비티 시작
Intent intent = new Intent(this, SubActivity.class);
startActivityForResult(intent, REQUEST_CODE);

// 결과 처리
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        // 자식 액티비티로부터 전달된 데이터 처리
        String resultData = data.getStringExtra(EXTRA_RESULT_DATA);
        // 결과 데이터 사용
    }
}

이와 같이, putExtra()와 getExtra() 메서드를 통해 안드로이드 액티비티 간에 효과적으로 데이터를 전달할 수 있습니다.

태그: 안드로이드 액티비티 인텐트 데이터전달

6월 29일 01:51에 게시됨