오늘은 우리가 만드는 화면 끼리의 전환을 공부해볼 것이다.
한 화면에서 어떤 버튼을 누르면 다른 화면으로 간다든지
그 화면에 입력한 정보를 다른 화면에서 출력한다든지 등의
공부를 해보자.
1. 화면 전환
2. 화면 간 데이터 전송
3. 두번째 화면에 입력한 값 다시 메인 액티비티로 가져오기
4. 묵시적 인텐트로 액티비티 실행
5. 다른 앱에서 앱 화면 켜기
1. 화면 전환

우선 액티비티 메인 xml에 액티비티 전환을 해줄
버튼을 하나 만들어주자.

그리고 메인 자바 파일로 와서
버튼 참조변수를 만들고
리스너까지 만들어주자.

이제 두 번째 화면을 만들어줘야 한다.
새로운 자바 클래스를 만들자.

2번째 액티비티 자바 파일에
setContentView를 쓰고
그 안에 내용물을 넣기 위해
activity_second.xml을 만들자.

layout폴더 안에 만들어야 한다.

이 xml파일에
간단하게 텍스트뷰로 2번째 액티비티라고 쓰고

다시 2번째 자바로 돌아와서
setCOntentView 안에 방금 만든
activity_second를 넣어준다.

이때 주의해야 할 점이 있다.
우선 manifests폴더 안에 있는
AndroidMAnifest 파일을 켜보자.

액티비티는 안드로이드의 4대 구성요소로
반드시 새로 만들거나 하면
방금 킨 xml 파일에 등록해야 한다.
<activity>가 있는 곳 앞뒤로
새로 <activity>를 만들고
name과 exporter값(false로)을 주자.
Android Application의 4대 구성요소[Component] - AndroidManifest.xml의
<application> 태그 안에 반드시 등록해야만 사용할 수 있는 주요 클래스들 ]
1. Activity - 화면 담당 클래스
2. BroadcastReceiver - 디바이스의 특정 상태[문자수신, 배터리부족, 부팅완료, gps 상태정보 등등..]를
OS에서 방송해 주면 이를 수신할 때 사용
3. Service - 백그라운드(앱은 실행 중- 화면에서 안 보이는)에서 코드를 동작하게 하고 싶을 때 사용. [ex. 뮤직플레이어 앱]
4. Contents Provider - 다른 앱에게 나의 DB 정보를 제공할 때 사용 [ex. 사진앱 or 연락처앱 ]

그리고 메인 액티비티 자바로 가서
btn에 뷰를 넣고
리스너를 만든다.
여기서 2번째 액티비티를 실행시켜 줄 객체를 만들어야 한다.
이것이 Intent 객체다.
파라미터엔 context와 내가 실행시킬 액티비티의 class 정보를 주면 된다.
그리고 startActivity(intent)를 하면 끝


첫 번째 결과물 화면에서
버튼을 누르면 두 번째 액티비티로 가게 된다.
그리고 만약 화면 제일 아래에 있는
폰 자체의 내비게이션에서 뒤로 가기 버튼을 누르면
다시 첫 번째 액티비티로 가게 된다.

만약 그게 싫다면
즉, 2번째 액티비티로 갈 때 메인 액티비티가 종료되길 원한다면
finish();를 써주자.

이제 리스너를 만들 때 굳이 익명클래스를 만들지 않아도 된다.
리스너 괄호 안에
view -> {}를 만들고
이 { } 안에 intent 객체를 만드는 방식을 사용해도 되기 때문이다.
이런 방식을 람다 방식이라고 한다.

그리고 만약 그 액티비티의
액션바의 타이틀을 바꾸고 싶다면
getSupportActionBar().setTitle("여기에 이름"); 을 쓰고
뒤로 가기 버튼을 만들고 싶다면
getSupportActionBar().setDisplayHomeAsUPEnabled(true);를
쓰면 된다.
그러나 이것만 써선
뒤로 가기 버튼이 작동하지 않는다.
이땐 inSupportNavigateUp() 메소드를 만들어
super.onbackPressed(); 코드를 안에 적어주자.

그럼 위의 화면과 같이 결과가 나오며
뒤로 가기 버튼도 잘 작동할 것이다.
2. 화면 간 데이터 전송
이번엔 한 화면에서 입력한 데이터를
다른 화면에서 출력해 보자.
우선 새로운 프로젝트를 만들자.

그리고 자바 안에 있는
내 폴더를 오른쪽으로 눌러
New - Activity - Empty View Activity를
눌러주자.

그리고 액티비티 이름을
SecondActivity로 설정하고 ok를 누르자.
그럼 1번에서 했던
새로운 자바 클래스를 만들고, 새로운 xml을 만든 후,
manifest파일에 가서 <activity를 선언하고,
setContentView를 작성하는 것까지 자동적으로 다 처리가 되어있을 것이다.


위에 보이는 것처럼
모두 다 되어있다.

이제 메인 xml로 가서
이름, 나이를 적을 editText와 button을 만들자.

그 후 메인 자바 클래스로 와서
참조변수를 선언하고
btn에 리스너를 단 후
String name, int age에 각각 적은 값을 넣어준다.
그리고 Intent 객체를 만들어서
그 객체가 데이터를 보내게 해 준다.
putExtra라는 명령어이며
첫 번째 파라미터는 그 데이터를 지칭할 이름,
그리고 두 번째 파라미터는 값을 넣는다.
마지막으로 startActivity(intent);를 해주면 끝

이제 두번째 액티비티 xml로 가서
텍스트 뷰를 만들어주자.

그리고 두번째 액티비티 자바 클래스로 이동해서
intent 객체를 만들고
(이때 new 가 아닌 getIntent를 쓰자.)
String과 int 값들을 받은 후
각각 title에 넣고
텍스트 뷰에 setText를 해주면 된다.

첫 번째 화면의 모습이며

첫 번째 화면에 넣은 값이
두 번째 화면에 나타나는 모습이다.
3. 두번째 화면에 입력한 값 다시 메인 액티비티로 가져오기
다시 새로운 프로젝트를 만들고

액티비티 메인 xml에
두번째 화면으로 갈 버튼과
값을 출력할 텍스트뷰를 만들자.

간단하게 테스트하기 위해
위와 같이 만들었다.

그리고 메인 자바 클래스로 이동해
참조변수에 뷰를 넣고
리스너를 람다 형식으로 만든 후
intent 객체까지 만들었다.

그 후 onCreate 메소드
밖에 멤버 함수로
ActivityResultLauncher라는 객체를 만들어야 한다.
registerForactivityResult 안에 파라미터로는
ActivityResultContracts.StartActivityForResult()와
new ActivityResultCallback을 써야 한다.
(두 번째 파라미터로 인해 익명클래스 생성)

이 익명클래스 안에는
실행시켰던 액티비티에서 [뒤로 가기 버튼]으로 취소했을 수도 있어서
if 문을 통해
그 상황을 나눠줘야 한다.

이제 두 번째 액티비티 xml로 가서
이름, 나이를 입력할 EditText를 만들고
버튼까지 만들어주자.

이런 느낌으로..

그 후 2번째 액티비티 자바 클래스로 와서
버튼에 리스너를 달고
위에서도 했듯
각각의 데이터를 String과 int 자료형에 넣어서
intent 객체를 통해
데이터를 보낸다.
그리고 setResult(RESULT_OK, intent)를 통해
보내줘야 아까 if 문으로 나눈 것이 제대로 작동을 한다.

다시 메인 액티비티 자바 클래스로 와서
if문에
RESULT_OK 일 때
Intent 객체를 만들어서
데이터를 받아서
텍스트뷰에 setText를 하면 끝!



위의 결과화면처럼 잘 작동하게 된다.
(회원가입할 때 주소나 id 중복 테스트 하는 느낌이다...)
4. 묵시적 인텐트로 액티비티 실행
새로운 프로젝트를 만들고

메인 xml에
버튼을 하나 만들자.

그 후 메인 자바 클래스로 가서
버튼에 리스너를 만든 후
새로운 액티비티를 만들어주기 해서
자동으로 2번째 액티비티 xml과 자바파일을 생성하자.

그 후 androidmanifest.xml로 가서
두 번째 액티비티 쪽에
<intent-filter> 안에
이름을 명명하고
카테고리도 넣어주자.
(둘 다 필수)

그리고 메인 자바 클래스로 가서
버튼 리스너 안에
인텐트 객체를 만들고
setAction에 aaaa(묵시적 인텐트 : 아까 명명한 두 번째 액티비티 이름 )을
넣고 startActivity(intent)를 하면


별 다른 코드 없이도
2번째 화면이 실행이 된다.
5. 다른 앱에서 앱 화면 켜기
새로운 프로젝트를 만들어서
4번의 2번째 화면을 켜보자.(aaaa라고 명명된 액티비티)

메인 xml에
버튼만 놓고

이를 메인 자바 클래스에서
리스너를 만들고
그 안에 intent객체도 만들어 준 후
setAction("aaaa");를 하고
startActivity(intent);
를 해준다.

그럼 저 버튼을 누르면

4번에서 만든 2번째 액티비티가 켜진다...(신기해)
'# 개발 > Android' 카테고리의 다른 글
Android #13 - Thread (국비39일차) (0) | 2023.02.24 |
---|---|
Android tip 1 - 라이브러리 추가 (0) | 2023.02.24 |
Android #11 - MaterialDesign2 (국비37일차) (2) | 2023.02.22 |
Android #10 - MaterialDesign (국비36일차) (0) | 2023.02.21 |
Android #9 - ViewPager, Fragment (국비35일차) (0) | 2023.02.20 |