로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2602
좋아요 1436 수강생 20099

아래의 글은 BOOSTER 서포터즈로 활동했던 zhfpt***님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/zhfptm12/221821435520
2)작성날짜: 20/02/23
<본문작성>
[LECTURE] 1) 프래그먼트 만들기 : edwith

들어가기 전에 액티비티로 만들어진 화면은 시스템에서 관리합니다. 따라서 액티비티의 내부에는 속성이나 메소드의 수가 상당히 많습니다. 한 마디로 무거운 거죠. 그래서 액티비티 안에 ... - 부스트코스

www.edwith.org

액티비티로 만들어진 화면은 시스템에서 관리합니다.

따라서 액티비티의 내부에는 속성이나 메서드의 수가 상당히 많습니다.

한 마디로 무거운 거죠.

그래서 액티비티 안에 액티비티를 부분 화면으로 올리는 것은 권장하지 않습니다.

여러 개의 액티비티 안에 동일한 레이아웃이 부분적으로 추가되어야 하는 경우에는 이런 경우 프래그먼트를 만들면 재사용이 쉬워집니다.

프래그먼트(Fragment)

액티비티 위에 올라가도록 만들었기 때문에 액티비티가 시스템 역할을 하게 되고 액티비티보다 훨씬 가볍게 화면 구성을 할 수 있다는 장점이 있습니다.

프래그먼트를 위한 XML 레이아웃과 프래그먼트를 위한 소스 파일이 한 쌍으로 만들어지고 이 프래그먼트 객체를 필요할 때 액티비티에 사용할 수 있기 때문에 독립적으로 사용할 수 있게 됩니다.

프래그먼트에도 액티비티처럼 수명주기(Life Cycle)가 있습니다.

프래그먼트의 수명주기에는 onAttach와 onDetach 메서드가 다른 수명주기와는 다르게 있습니다.

프래그먼트는 액티비티 위에 올라갔을 때 비로소 프래그먼트로서 동작할 수 있기 때문에 액티비티 위에 올라갈 때 onAttach, 액티비티에서 내려올 때 onDetach 메서드를 자동으로 호출해줌으로써 그 시점을 알 수 있도록 해 줍니다.

프래그먼트도 부분 화면이기 때문에 하나의 XML 레이아웃 파일과 하나의 소스 파일로 정의할 수 있습니다.

xml 레이아웃에서는

 

위 사진과 같이 작성하여 사용할 수 있습니다.

만약 소스 코드에서 프래그먼트를 추가하고 싶다면 프래그먼트 매니저를 사용해야 합니다.

프래그먼트는 프래그먼트 매니저가 관리하기 때문에 프래그먼트 매니저를 통해 화면에 추가하거나 다른 프래그먼트로 교체하거나 하는 일을 할 수 있습니다.

프래그먼트 매니저는 getSupportFragmentManager 메서드를 호출하면 참조할 수 있습니다.

getSupportFragment().beginTransaction().replace(R.id.container, fragment).commit();

container은 프래그먼트가 위치할 뷰를 의미합니다.

프래그먼트와 액티비티 간에 필요한 데이터를 전달하거나 필요한 기능을 수행할 때 프래그먼트에서는 인텐트를 사용할 수 없기 때문에 메서드 호출을 이용하여야 합니다.

그렇기 때문에 onAttach 메서드와 onDetach 메 서드가 프래그먼트가 액티비티 위에 올라갈 때 호출되며 매우 중요한 이유입니다.

<생각해보기>

1. 프래그먼트 안에 프래그먼트가 들어갈 수도 있을까요?

- 안될 건 없다고 생각합니다.

2. 프래그먼트에서 액티비티로 데이터를 전달했다가 액티비티에서 다시 프래그먼트로 데이터를 전달하는 과정을 정리해서 얘기해볼 수 있을까요?

- Fragment fragment = new Fragment 을 통해 fragment 인스턴스 참조를 통해 메서드를 호출하여 데이터 전달합니다  마찬가지로 프래그먼트 -> 액티비티도 이러한 방식을 통해 데이터를 전달합니다.

 

*********************************************