Intent
메시징 객체로 다른 구성 요소로부터 작업을 요청하는데에 사용
인텐트와 구성 요소 간의 통신 방식은 크게 3가지,
- 서비스 시작
- 브로드캐스트 전달
- 액티비티 시작
이 있는데, 다뤄볼 방식은 액티비티 시작
앱 내부의 단일 화면을 나타내는 Activity의 새 인스턴스를 시작하기위해 Intent를 startActivity()로 전달하면
Intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담음
실습
버튼을 통해 한 액티비티에서 다른 액티비티를 시작
<activity_main.xml
먼저 LinearLayout에 Button을 생성해 클릭이벤트로 다른 액티비트를 시작할 수 있게함
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="next"
android:id="@+id/movetoSub1" />
</LinearLayout>
MainActivity.java
생성한 Button을 연결하고 onClick 이벤트 생성
public class MainActivity extends AppCompatActivity {
Button movetoSub1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
movetoSub1 = (Button)findViewById(R.id.movetoSub1);
movetoSub1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), SubActivity1.class);
startActivity(intent);
}
});
}
}
OnClick 이벤트 내부에는 Intent 객체를 생성하고
첫번째 파라미터에는 ApplicationContext()를 가져오는 getApplicationContext()와
두번째 파라미터에는 이동할 페이지의 클래스를 작성 후 intent를 startActivity()에 전달
AndroidManifest.xml
onClick 이벤트에서 이동되는 페이지는 매니페스트 파일에 선언해줘야함
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.ict.activityprj2">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ActivityPrj2">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 추가 -->
<activity android:name=".SubActivity1" android:label="sub1" />
</application>
</manifest>
Intent를 사용하면 Android 시스템에서는 시작할 적절한 구성요소를 찾는데, 이때 Intent의 내용을 기기에 있는 다른 앱의 매니페스트 파일에서 선언된 인텐트 필터와 비교하는 방법을 사용함
→ 해당 Intent와 일치하는 필터가 있으면 시스템이 해당 Activity의 onCreate()메서드를 호출하여 Intent 객체에 전달하고 일치하는 Activity를 시작함
activity_sub1.xml
LinearLayout 내부에 이전 액티비티로 돌아가는 Button 생성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="activity_sub1.xml"
android:textColor="@color/white" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="go back"
android:id="@+id/backtoMain"/>
</LinearLayout>
SubActivity1.java
이전으로 되돌아가기위해 스택에 쌓여있던 화면 finish() 함수를 호출해 삭제
public class SubActivity1 extends AppCompatActivity {
Button backtoMain;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub1);
backtoMain = (Button)findViewById(R.id.backtoMain);
backtoMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
현재의 화면으로 넘어왔을때 Android 내부에서는 화면이 스택이라는 곳에 쌓임, finish()를 이용해 스택에서 제거
스택 내부
이전 → 현재 → 이후
SubActivity
MainActivity
MainActivity
MainActivity
'Android' 카테고리의 다른 글
[Android] Intent를 사용해 데이터 전달 (0) | 2021.10.30 |
---|---|
[Android] ActionBar(액션바) (0) | 2021.10.29 |
[Android] Context Menu(컨텍스트 메뉴) (0) | 2021.10.27 |
[Android] ViewFlipper (0) | 2021.10.26 |
[Android] AutoCompleteTextView(자동완성 텍스트뷰) (0) | 2021.10.25 |