본문 바로가기
Android/Kotlin

kotlinx 사용하여 컨트롤러 쉽게 가기(주의!)

by 호야호잇 2020. 11. 23.

주의참고!!!! thdev.tech/android/2020/10/07/Remove-kotlinx-synthetic/

 

Kotlin Android Extension

 

링크된 문서를 읽어보면 Kotlin Android Extension 에 대해 파악할 수 있는데, 간단하게 설명하면 코드 내에서 View 를 가져오기 위해 findViewById() 를 사용하던 것을 그러한 과정없이 바로 사용할 수 있는 방법이다.

 

위에 plug-in 설치 과정에서 'Kotlin Extension for Android' 가 obsolete 되었고 해당 plug-in 은 'Kotlin' plug-in 에 모두 통합되었다는 것을 볼 수 있다. 이 때문에 따로 설정 없이 바로 Kotlin Android Extension 를 사용할 수 있을 것이라고 생각했지만, 사용하기 위해서는 Gradle 에 한 줄을 추가해줘야 한다.

 

// build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
// 아래에 다음 코드를 추가해준다.
apply plugin: 'kotlin-android-extensions'

 

 

요즘은 Frgment 를 많이 사용하니 문서에는 설명이 없는 Fragment 에서의 사용법을 예제로 적어보겠다.

아래와 같은 fragment xml 파일에서 'greetings' 라는 id 를 갖는 TextView 의 text 를 "wow" 로 바꾸고 싶다면

 

 

<!-- fragment_main.xml -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ee.maytr.www.kotlinexample.MainActivityFragment"
    tools:showIn="@layout/activity_main">

    <TextView
        android:id="@+id/greetings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</RelativeLayout>

 

import kotlinx.android.synthetic.main.<layout>.* 를 추가해주고

onViewCreated() 에서 수정해주면 된다.

 

// MainActivityFragment.kt

package ...

import ...
import kotlinx.android.synthetic.main.fragment_main.*

class MainActivityFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater!!.inflate(R.layout.fragment_main, container, false)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        greetings.text = "wow"
    }
}

 

여기서 좀 해맸는데, activity 에서 작업할 때는 onCreat() 에서 작업해도 상관 없지만, Fragment 의 경우에는 infalte 가 onCreateView() 에서 이루어지기 때문에 onViewCreated() 이후에 불리는 코드에서만 정상적으로 작동한다.

 

이제 Kotlin 으로 열심히 개발해봅시다!

==================================================================

 

 

 

1. bulid.gradle에 들어가서

2. kotlin-android-extensions 플러그인 추가

3. 사진에 표시된 Sync Now 클릭

 

잠시 기다리면 kotlinx.android.systhetic.main.activity_main.* 을 사용할 수 있게 된다.

'Android > Kotlin' 카테고리의 다른 글

입력란에 Text입력 후 하단 입력 키보드 내리기  (0) 2020.11.23