일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- textContent
- 프래그먼트
- DOMContentLoaded
- Class
- fragment
- serializable
- intent
- 부가데이터
- putextra
- 230503
- string
- classList
- 230510
- 데이터 타입
- javascript
- 인텐트
- Flutter
- Adapter
- parcelable
- null-safety
- C++
- 함수 인자
- html
- 안드로이드
- querySelector
- 생명주기
- ViewPager
- 230508
- ActionBar
- DFS
- Today
- Total
나만의 개발노트
[안드로이드] 액티비티(Activity), 인텐트(Intent) - 화면전환 본문
애플리케이션 구성 요소
- 시스템에서 관리함
- AndroidManifest.xml에 구성요소를 넣어두면, 앱이 설치될 때 시스템이 이 파일로 구성요소를 확인함
-> 구성요소를 추가하면 반드시 매니페스트 파일에 그 정보를 넣어야 함
액티비티 (Activity)
: 화면
서비스 (Service)
브로드캐스트 수신자(Broadcast Receiver)
컨텐트 프로바이더(Content Provider)
액티비티 전환하기
1. File -> New -> Activity 로 새로운 액티비티 만들기
*AndroidManifest.xml에 <Activity>로 자동 추가됨
만약 수동으로 java, xml 만든 경우, 반드시 AndroidManifest.xml에 추가해줄 것
#AndroidManifest.xml
<activity
android:name=".MainActivity2"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2. (액티비티1) Intent 객체 만들기
- intent : 액티비티를 관리하는 시스템에 원하는 행동을 요청하는 포맷
Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
3. (액티비티1) startActivity() / startActivityForResult()로 원하는 화면 전달하기
1) 그냥 화면 실행
startActivity(intent);
2) 데이터를 받는 경우
- 요청코드 : 정보를 보내는 화면을 구분하기 위한 코드
- startActivityForResult(intent, 요청코드);
startActivityForResult(intent, 101);
4. 액티비티1로 돌아오기 (액티비티2에 작성)
1) 그냥 화면 실행
- 액티비티는 stack(선입후출)의 형태로 아래에 쌓임 -> finsh() 하면 이전 액티비티가 보임
finish();
2) 데이터 전달하기
1. Intent 객체 생성 -> intent.putExtra("키값","데이터"); -> setResult(intent);
2. 응답이 정상적인 응답인지 구분하기 위해 Activity.RESULT_OK 또는 RESULT_CANCELED
3. MainActivity에서 응답받을 메서드 정의
Intent intent = new Intent();
intent.putExtra("name","예시");
setResult(Activity.RESULT_OK,intent);
finish();
#MainActivity2.java 전체코드
package com.example.pracactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent = new Intent();
intent.putExtra("name","예시");
setResult(Activity.RESULT_OK,intent);
finish();
}
}
5. 전달한 데이터 받기
3. 액티비티1에서 응답받을 메서드 정의
: 우클릭 -> Generate -> Override Methods -> onActivityResult()
*'on' : 콜백함수
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
-> requestCode : 액티비티1에서 데이터 전달한 화면을 구분하기 위해 보낸 문자 ex) 101
resultCode : 응답구분하는 상수(setResult()의 두번째 인자) ex)Activity.RESULT_OK
data : 전달받은 intent
6. 데이터(intent) 사용
- 데이터가 문자열인 경우, data.getStringExtra("키값",)
//액티비티2에서 보낸 intent중 name값이 "name"인 데이터 받기
String name = data.getStringExtra("name");
#최종 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="액티비티2로 바꾸기"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="액티비티1"
android:textSize="30dp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
#최종 MainActivity.java
package com.example.pracactivity;
import androidx.annotation.Nullable;
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 MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//'액티비티2로 바꾸기' 버튼 누르면 액티비티2 실행
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1. Intent 객체 만들기
Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
//2. 데이터 전달받기 위한 메소드 (requsetCode : 101)
startActivityForResult(intent, 101);
}
});
}
//7.전달받은 데이터 확인 메소드
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 101){ //액티비티2에서 보낸 데이터인지 확인
//액티비티2에서 보낸 intent중 name값이 "name"인 데이터 받기
String name = data.getStringExtra("name");
Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
}
}
}
#최종 activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="액티비티2로 바꾸기"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="액티비티1"
android:textSize="30dp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
#최종 MainActivity2.java
package com.example.pracactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//3. 데이터 전달하기 위한 intent 생성
Intent intent = new Intent();
//4. putExtra로 데이터 전달 (name: "name", value: "예시")
intent.putExtra("name","전달된 데이터 예시");
//5. 데이터 전송 메소드 (Activity.RESULT_OK: resultCode)
setResult(Activity.RESULT_OK,intent);
//6. 이전 화면(액티비티1)으로 돌아가기
finish();
}
});
}
}
#실행화면
출처 : https://www.boostcourse.org/mo316/lecture/259016?isDesc=false
'[안드로이드] > [안드로이드] 공부 기록' 카테고리의 다른 글
[안드로이드] 부가데이터(putExtra), 플래그(Flag) (1) | 2023.10.12 |
---|---|
[안드로이드] 인텐트(intent) (1) | 2023.10.11 |
[안드로이드] 원형이미지뷰(CircleImageView) (0) | 2023.10.07 |
[안드로이드] 리스트뷰(ListView) , Adapter(어댑터) (1) | 2023.09.26 |
[안드로이드] 인플레이션(inflation), 부분화면 (0) | 2023.09.26 |