불로구

안드로이드 스튜디오 - Fragment<프레그먼트> ( 실습편1 ) 본문

프로그래밍/코틀린 안드로이드

안드로이드 스튜디오 - Fragment<프레그먼트> ( 실습편1 )

맹이맹이 2021. 4. 12. 02:15
반응형

- 프래그먼트 적용법

-> XML에 의한 ViewComponent 추가

-> 코드를 통한 동적으로 추가

 

- ViewComponent를 통한 추가방법

 

activity_main.xml  

-> 들어갈 액티비티에 fragment 자리를 배치해준다.

-> TextView같은 리소스들은 id지정이 필수가 아니지면 fragment를 사용하기 위해선 id가 필수이다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:textSize="50dp" />

    <!-- 아이디를 반드시 지정-->
    <fragment
        android:id="@+id/fragment_one"
        android:name="com.example.aop_part2.fragment.fragment.FragmentOne"
        android:layout_width="match_parent"
        android:layout_height="300dp"/>

</LinearLayout>

 

fragment_one.xml

-> 프레그먼트를 생성한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/purple_200">

</LinearLayout>

 

FragmentOne.kt

// View를 그리는 역할
    // 프래그먼트가 인터페이스를 처음 그릴 때 호출
    // inflater : 뷰를 그려주는 역할
    // container : 부모 뷰
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        Log.d("life_Cycle" , "F onCreateView")
        return inflater.inflate(R.layout.fragment_one, container,false)


//        return super.onCreateView(inflater, container, savedInstanceState)
    }

-> oneCreateView 메서드에서 inflater를 통해 리소스와 root, AttachRoot를 설정하고 반환한다.

-> activity_main.xml 에서 프래그먼트 영역에 id지정이 필수인 이유가 리소스를 지정해줘야 하기 때문이다.

 

 

 

- 동적으로 추가하는 방법

 

-> activity_main에서 버튼을 하나 만들고 버튼이 클릭되었을때 동작하는 방법이다.

-> 우선 프래그먼트를 동적으로 사용하기 위해서는 프래그먼트 매니저와 프래그먼트 트랜잭션이 필요하다.

-> 주의할점은 트랙재션의 단위는 시작과 끝을 나타내므로 beginTransaction()으로 시작만하면 적용이 되지 않는다.

-> 그러므로 commit()을 이용한 끝을 설정해주어야 프래그먼트가 적용한다

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            // 프래그먼트 동적으로 작동
            val fragmentOne : FragmentOne = FragmentOne()
            // 매니저 필요
            val fragmentManager : FragmentManager = supportFragmentManager
            //트랙잭션 생성 -> 작업의 단위 ( 시작과 끝 )
            val fragmentTransaction = fragmentManager.beginTransaction() // 시작
            fragmentTransaction.replace(R.id.container, fragmentOne) // 뷰아이디 자리에 fragment가 간다.
            fragmentTransaction.commit() // 끝
            // 끝을 내는 방법 3개
            // commit -> 시간이 될 때
            // commitnow -> 지금 당장
            // commitAllowingStateLoss() -> 액티비티가 무언가를 복구할 때 실행이 안될 수 있음

        }
    }

 

반응형
Comments