프레그먼트에서 특정 액티비티로 전환되는 것을 한 번 해보자.
Fragment 생성은 Fragment 간단 사용법에서 이어서 진행해본다. 여기서는 이전 글에서 생성했던 로그인 버튼을 누르면 메인 액티비티로 전환되는 것을 살펴보겠다.
정말 간단하므로 로그인 버튼을 클릭하는 코드만 보자
xxxxxxxxxx
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_login, null)
val loginButton = view.findViewById<Button>(R.id.login_btn)
loginButton.setOnClickListener(object :View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent(context, MainActivity::class.java)
startActivity(intent)
// 다른 액티비티에서 전환할 때
// activity?.finish()
}
})
return view
}
로그인 버튼에 클릭 이벤트를 걸어 클릭 시 MainActivity의 intent를 생성하고 시작하는 것을 볼 수있다. 원래 java코드와 비교를 해보면 변경점을 알 수 있다.
xxxxxxxxxx
Intent intent = new Intent(getContext(), MainActivity.class);
startActivity(intent);
// getActivity().finish();
이제 이 코드를 좀 더 코틀린스럽게(?) 바꿔보자.
코틀린에 강점 중 하나가 findViewById의 나열을 더 이상 보지 않아도 된다는 것이다. 코틀린 안드로이드 익스텐션(Kotlin Android Extension)을 사용하여 쉽게 해결할 수 있다.
익스텐션 사용하기
Gradle Scripts의 build.gradle(Module: app)
에 다음처럼 플러그인이 추가가 되어 있으면 사용할 수 있다.
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
이제 뷰 객체의 아이디 그대로 객체를 사용하면 된다.
x
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_login, null)
login_btn.setOnClickListener(object :View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent(context, MainActivity::class.java)
startActivity(intent)
activity?.finish()
}
})
return view
}
프레그먼트에서는 프레그먼트를 구성하는 레이아웃을 사용할 수 있는 시점인 onViewCreated()
부터 뷰 객체에 접근할 수 있다는 것을 알아두자.
조금 더 간단하게 해보자. java에서 lambda를 이용해 코드를 간결하게 만들 수 있던 것처럼 Kotlin에서도 lambda식을 사용해 간결하게 할 수 있다.
xxxxxxxxxx
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_login, null)
login_btn.setOnClickListener(({
val intent = Intent(context, MainActivity::class.java)
startActivity(intent)
activity?.finish()
})
return view
}
object: View.OnClickListener { } 를 ( )로 바꾸어주면 더욱 코드가 간결해진 것을 볼 수 있다.
'Android' 카테고리의 다른 글
[Kotlin] 코틀린에서 형변환은 어떻게 할까 (0) | 2018.10.17 |
---|---|
[Java][Kotlin] Fragment 간단 사용법 (3) | 2018.10.13 |
Kotlin(코틀린)을 익혀보자 (0) | 2018.10.12 |
댓글