안드로이드 인텐트(intent) 엑티비티 전환 기능 구현
- 프로그래밍/안드로이드
- 2020. 3. 12. 02:35
지난번 구글 접속하기와 전화 키패드 띄우기에서 사용했던 인텐트를 이용하여 이번에는 사용자가 정의한 액티비티 간의 이동을 해보도록 하겠습니다.
프로젝트 파일은 안드로이드 간단한 기능 구현 포스팅에서 사용했던 프로젝트를 그대로 사용하겠습니다. 아래 링크에서 사용했던 프로젝트입니다.
안드로이드 토스트, 구글 접속하기, 전화 키패드 띄우기 기능 구현
| activity 생성
지난번 만들었던 activity_main에서 버튼을 클릭하면 새로운 화면으로 넘어가고, 그 화면에서 버튼을 클릭하면 다시 main 화면으로 돌아오는 것을 구현해보려고 합니다. 새로운 화면이라는 것은 하나의 액티비티를 의미합니다. 따라서 액티비티 하나를 생성해주도록 하겠습니다.
app이나 java위에서 마우스 우클릭 버튼을 누르고 New -> Activity -> Empty Activity 순서대로 이동하면 액티비티 하나를 생성할 수 있습니다.
지금 만드는 액티비티는 버튼을 누르면 스마트 폰의 화면이 main 액티비티로 돌아가게 하는 역할을 하기 때문에 BackActivity라고 이름을 지어주었습니다. finish를 눌러서 액티비티 생성을 완료하겠습니다.
액티비티를 생성하면 다음과 같이 자동적으로 manifest 파일에 등록이 됩니다. 만약 등록되어 있지 않다면 2번 빨간색 네모 박스처럼 액티비티를 등록해주어야 사용할 수 있습니다.
| activity_back.xml 구성하기
이제 back activity에 button을 하나 추가하도록 하겠습니다.
LinearLayout을 사용하여 button을 하나 추가해주었습니다. 코드는 아래 더보기 버튼을 누르면 있습니다.
<?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=".BackActivity">
<Button
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="돌아가기"/>
</LinearLayout>
버튼에 돌아가기라는 텍스트를 넣어주었습니다. 버튼이 눌렸을 때의 동작도 정의하기 위해 java 코드도 넣어주겠습니다.
자바 코드는 아래에 있습니다.
package com.example.secondapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class BackActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_back);
Button btn_back = findViewById(R.id.btn_back);
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(BackActivity.this, "돌아가기 버튼이 눌렸습니다.", Toast.LENGTH_SHORT).show();
finish();
}
});
}
}
앞의 포스팅에서 설명했던 부분과 거의 비슷한데 finish()라는 함수가 처음 나왔습니다. finish() 함수는 이 액티비티를 종료할 수 있도록 해주는 함수입니다. 즉 돌아가기 버튼이 눌리면 BackActivity가 종료되는 것입니다.
이것이 가능한 이유는 액티비티가 스택 형태로 쌓이기 때문입니다. 즉 main activity에서 버튼을 눌러 back activity로 넘어갔다면 main activity위에 back activity가 쌓이는 것입니다. 그러고 나서 back activity를 종료했으니 다시 main activity로 돌아갈 수 있는 것입니다.
back activity 구현은 완료가 되었고, 이제 main acitivity에 버튼을 하나 넣고, 그 버튼을 클릭하면 back activity로 넘어가는 것을 구현해보겠습니다.
| activity_main.xml 구성
이 xml 파일에 button을 하나 추가해주겠습니다.
기존의 코드에 이어서 버튼 하나를 추가해주었습니다. id는 btn_start로 텍스트는 "시작하기"를 넣어주었습니다. 코드는 아래에 있습니다.
<Button
android:id="@+id/btn_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="시작하기"/>
이어서 자바 코드도 넣어주겠습니다.
자바 코드는 아래와 같습니다.
package com.example.secondapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_start = findViewById(R.id.btn_start);
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"시작 버튼이 눌렸습니다.",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, BackActivity.class);
startActivity(intent);
}
});
}
}
코드를 보면 앞에서 사용했던 Intent와 살짝 다른 모습을 볼 수 있습니다. 인자로 packageContext: MainAcitivity.this와 BackActivity.class가 들어가는데, 이것은 이 패키지 명(MainActivity)의 BackActivity.class를 실행해달라는 의미입니다.
아직 앱을 하나밖에 만들지 않았기 때문에 BackActivity라는 이름의 class가 하나밖에 없지만 앱을 여러 개를 만들면 다른 앱들에도 BackActivity라는 이름의 class가 있을 수 있습니다. 여기서 내가 사용하고 싶은 Activity는 현재 내 앱에 있는 BackActivity입니다. 내 앱이라는 것을 알리기 위해 첫 번째 인자에 Context를 넣어주면(Activity는 Context를 상속) Context에서 앱의 패키지 명을 가져오고, 가져온 패키지 명 앱의 안에 있는 BackActivity.class를 사용하게 되는 것입니다. 따라서 위 결과를 실행하게 되면 MainActivity에서 BackActivity로 화면 이동을 할 수 있게 됩니다.
| 최종 결과 화면
최종 결과 화면입니다. 처음 MainActivity에서 시작하기 버튼을 누르면 화면 아래쪽에 "시작 버튼이 눌렸습니다."라는 문구와 함께 일정 시간이 지나면 BackActivity로 넘어가는 것을 볼 수 있습니다. 다시 돌아가기 버튼을 누르면 "돌아가기 버튼이 눌렸습니다."라는 문구와 함께 일정 시간이 흐른 뒤 다시 MainActivity 화면으로 넘어오게 됩니다.
여기까지 액티비티 간 인텐트를 사용하여 화면 전환을 해 보았습니다.
* SK 플래닛의 안드로이드 강의를 참고해서 작성하는 포스팅입니다. 공부를 하면서 기록하는 내용이다 보니 틀린 내용이 있을 수도 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사드리겠습니다. *
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 visibility 속성(visible, invisible, gone) (0) | 2020.04.27 |
---|---|
안드로이드 view, viewgroup (0) | 2020.04.26 |
안드로이드 토스트, 구글 접속하기, 전화 키패드 띄우기 기능 구현 (0) | 2020.03.11 |
안드로이드 다국어 지원 방법 (0) | 2020.03.10 |
안드로이드 프로젝트 생성 (0) | 2020.03.04 |
이 글을 공유하기