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

안드로이드 앱 프로그래밍

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

아래의 글은 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 인스턴스 참조를 통해 메서드를 호출하여 데이터 전달합니다  마찬가지로 프래그먼트 -> 액티비티도 이러한 방식을 통해 데이터를 전달합니다.

​

 

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