출처 : Do it! 안드로이드 앱 프로그래밍 / 정재곤
안드로이드 앱의 네 가지 구성 요소로는 액티비티(Activity), 서비스(Service), 브로드캐스트 수신자(Broadcase Receiver), 내용 제공자(Content Provider)가 있다. 이러한 정보들은 AndroidManifest.xml 파일에 저장된다. 이 파일 안에는 위의 네 가지 구성 요소 외의 앱에 대한 다양한 정보가 들어간다. 만약 새로운 액티비티를 만들어 앱에 추가한다면 이 매니페스트 파일에 새 액티비티 정보를 추가해야 한다.
액티비티를 소스코드에서 띄울 때는 startActivity() 메소드를 사용한다. 하지만 어떤 액티비티를 띄운 것인지, 그리고 띄웠던 액티비티로부터 다시 원래의 액티비티로 돌아오면서 응답을 받아 처리하는 코드가 필요할 때는 startActivityForResult() 메소드를 사용한다.
startActivityForResult(Intent intent, int requestCode)
> 화면 전환하기 예제
우선 전환할 액티비티를 하나 생성한다. 그 후 AndroidManifest.xml 파일에 아래와 같이 코드를 삽입한다.
<activity
android:name=".MenuActivity"
android:label="메뉴 액티비티"
android:theme="@style/Theme.AppCompat.Dialog">
</activity>
android:theme 속성의 @style/Theme.AppCompat.Dialog는 액티비티를 대화상자 형태로 나타내준다.
MainActivity
package com.example.project00_java;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
public static final int REQUEST_CODE_MENU = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
startActivityForResult(intent, REQUEST_CODE_MENU);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_MENU) {
Toast.makeText(getApplicationContext(),
"요청 코드 : " + requestCode + ", 결과 코드 : " + resultCode,
Toast.LENGTH_LONG).show();
if (resultCode == RESULT_OK) {
String name = data.getStringExtra("name");
Toast.makeText(getApplicationContext(), "응답으로 전달된 name : " + name, Toast.LENGTH_LONG).show();
}
}
}
}
MenuActivity
package com.example.project00_java;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button button = findViewById(R.id.button13);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(); // 인텐트 객체 생성
intent.putExtra("name","mike"); // name의 값을 부가 데이터로 넣기
setResult(RESULT_OK, intent); // 응답 보내기
finish(); // 현재 액티비티 없애기
}
});
}
}
-> 여기서 setResult를 해주는 이유는 첫 번째 파라미터로 응답 코드를 전달해주기 위함이다. 이 응답 코드와 인텐트는 새 액티비티를 띄운 원래 액티비티에 전달되게 된다. 만약 setResult를 해주지 않으면 기본 값으로 0이 전달되게 된다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="메뉴화면 띄우기" />
</LinearLayout>
activity_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button13"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="돌아가기" />
</LinearLayout>
새로운 액티비티를 만들어 추가하고 서로 간에 상태 코드나 데이터를 주고받는 방법을 정리하자면 아래의 그림과 같다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 정리 (8) - 플래그와 부가 데이터 사용하기 (0) | 2020.03.12 |
---|---|
[Android] 안드로이드 정리 (7) - 인텐트(Intent) (0) | 2020.03.12 |
[Android] 안드로이드 정리 (5) - 레이아웃 인플레이션 이해하기 (0) | 2020.03.12 |
[Android] 안드로이드 정리 (4) - 토스트, 스낵바, 대화상자, 프로그레스바 (0) | 2020.03.12 |
[Android] 안드로이드 정리 (3) - 이벤트 처리 (0) | 2020.03.11 |