-
FragmentAndroid/AndroidStudio 2018. 6. 21. 16:52
프래그먼트 이해하기
여러 액티비티에 공통되는 부분이 있다고 가정 ( 카카오톡을 켰을 때, 아래 생기는 메뉴바) 하면,
화면이 전환 될 때마다 똑같은 코드가 또 사용되게 된다.
때문에 하나의 액티비티에(시스템에서 관리) 여러 화면을 보여주기 위해 프래그먼트를 사용한다.
(과거에는 외부라이브러리였지만 현재는 api에 추가 되었으면, 널리 사용되기 때문에 꼭 알아야한다.)
프래그먼트는 액티비티를 본 따서 만들어졌다.
- 생명주기를 갖는다.
- 플래그먼트간 전환시 액티비티처럼 intent가 필요하다(intent를 닮았지만 다르다)
- 액티비티안에 존재하는 플래그먼트매니저(시스템의 역할)에 의해 전환된다.
- 플래그 먼트는 뷰가 아니기 때문에 context가 없다. -> 플래그먼트가 들어가는 액티비티에서 참조해야 한다.
- 시스템에서 관리하는 것이 아니기 때문에 훨씬 가볍다.
- 액티비티처럼 하나의 java src와 xml로 이루어진다.
프래그먼트 생성하기
Fragment java파일에 인플레이션 한다.
onCreateView() 콜백메소드에서 인플레이션 한다.
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}액티비티에 xml을 통해 넣을 수 있다.
<fragment> 태그를 사용하며
name 속성을 통해서 xml에 생성할 수 있다.
<fragment
android:id="@+id/mainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.bethejustice.myfragment.MainFragment"/>프래그먼트 매니저 사용하기
getSupportFragmentManager() 메소드를 통해, 액티비티안의 container(레이아웃)와 자바 소스를 연결할 수 있다.
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment2).commit();
(액티비티 안에서 매니저를 통해 xml을 container와 연결)
프래그먼트 xml안의 view들 사용하기
프래그먼트 java src에 onAttach() 콜백메소드에서 연결된 액티비티를 객체화 할 수 있다.
onAttach(), onDetach() 콜백 메소드에서 프래그먼트가 액티비티에 올라가고 소멸한다.
프래그먼트안의 view에 메소드를 추가하고 싶다면, 액티비티에 메소드를 만들고 프래그먼트에서 참조한다.
프래그먼트에 전역에 액티비티를 선언하고 onAttach()에서 객체화 한다음 onCreateView()에서 참조한다.
public class MainFragment extends Fragment {
MainActivity activity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (MainActivity) getActivity();
}
@Override
public void onDetach() {
super.onDetach();
activity = null;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main, container, false);
Button button = (Button) rootView.findViewById(R.id.goMenu);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 시스템이 아니기 때문에 메인에 메소드를 만들어 호출하여야한다.
activity.onFragmentChange(1);
}
});
return rootView;
}
}이 프래그먼트를 다른 액티비티에서 사용하려면 어떻게 해야할까.
전역에 선언된 activity가 특정 액티비티가 아닌 인터페이스라면 해당 프래그먼트를 재사용할 수 있다.(앞으로 계속 공부해야겠죠)
참조 http://www.edwith.org/boostcourse-android/lecture/17074/
'Android > AndroidStudio' 카테고리의 다른 글
안드로이드 thread와 handler (0) 2018.07.07 Android Guideline (0) 2018.07.02 Thread (0) 2018.07.01 Guide to background processing (0) 2018.06.30 서비스로 명령 전달 (1) 2018.06.20