불로구

안드로이드 스튜디오 - Fragment & transaction & manager ( 실습편2 ) 본문

카테고리 없음

안드로이드 스튜디오 - Fragment & transaction & manager ( 실습편2 )

맹이맹이 2021. 4. 21. 10:56
반응형
    <Button
        android:id="@+id/fragment_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="나와라"/>
    <Button
        android:id="@+id/fragment_button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사라져"/>

    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
        android:background="#ff33dd"/>
fragment_button.setOnClickListener {

            val fragmentManager : FragmentManager = supportFragmentManager
            val fragmentTransaction = fragmentManager.beginTransaction()
            fragmentTransaction.replace(R.id.container , fragmentOne)
            fragmentTransaction.commit()
        }
fragment_button2.setOnClickListener {
            val fragmentManager = supportFragmentManager
            val fragmentTransaction = fragmentManager.beginTransaction()
            fragmentTransaction.remove(fragmentOne)
//            fragmentTransaction.detach(fragmentOne)
            fragmentTransaction.commit()
        }

remove vs detach

-> remove는 해당 fragment가 존재할 경우 제거 한다

-> detach는 해당 fragment가 존재할 경우 떼어낸

-> remove의 경우 FragmentManager 안에서 완전히 제거

-> detach 의 경우 stack에 존재한다. 

FragmentManager

-> FragmentManager는 동적으로 프래그먼트를 다루기 위해 꼭 필요한 요소이다.

-> 액티비티와 프래그먼트의 중간에서 서로를 이어주는 역할

Fragment Transaction

-> 어떤 대상에 대해 추가, 제거, 변경 등의 작업들이 발생하는 것, 주로 DB에서 많이 사용하는 언어이다.

-> 트랜잭션의 상태를 프래그먼트 백스택을 통해 저장 가능

FragmentManager fragmentManager = getSupportFragmentManager(); // 프래그먼트 매니저 선언
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 트랜잭션 시작
fragmentTransaction.commit(); 커밋

-> 프래그먼트 매니저를 선언 후 beginTransaction()을 호출하여 작업을 시작한다

-> beginTransaction()과 commit() 사이에 작업을 지정한다.

-> commit()을 호출하여 트랜잭션을 끝낸다.

-> commit()을 호출하지 않으면 작업이 정상적으로 수행되지 않는다.

 

프래그먼트 백스택

- 현재 실행하려는 트랜잭션의 상태를 기억

-> ex) 앱을 뒤로가기 할 시 프래그먼트를 이전 상태로 되돌릴 수 있다.

...begin()

transaction.replace(R.id.fragment, fragment)

transaction.addToBackStack(data)

...commit()

 

반응형
Comments