Android – Anko 라이브러리로 액티비티 이동 쉽게 하기 with. 코틀린

Anko Commons: 인텐트, 다이얼로그 등을 편하게 사용 가능하게 하는 라이브러리

인텐트를 중심으로 강좌 글을 쓰고자 합니다.

인텐트는 (주로) 액티비티 이동 및 데이터 저장/전달을 담당하는 객체입니다.

1. Anko라이브러리를 추가하려면 모듈 수준의 build.gradle파일을 수정해야 합니다.

이 파일의 상대 경로는 MyApplication -> Gradle Scripts ->build.gradle입니다.

dependencies{ implementation "org.jetbrains.anko:anko:$anko_version" }

dependencies 블럭에 위와 같은 코드를 추가합니다. 이러한 것을 ‘라이브러리 의존성 추가’라고 합니다.

2. 프로젝트 수준의 build.gradle파일을 수정해야 합니다.

buildscript{ ext.anko_version='0.10.5'}

buildscript 블럭에 위와 같은 코드를 추가합니다. 이러한 것을 ‘라이브러리 버전을 변수에 지정’ 이라고 합니다.

3. Sync now를 누르면 라이브러리가 추가된 상태로 프로젝트가 다시 빌드될 것입니다!!

< 새로운 액티비티 파일은 file -> new -> activity -> emptyActivity 순으로 만들면 됩니다. >

< Anko 라이브러리를 사용하지 않고 액티비티 이동을 하였을 떄!! >

 // 액티비티 이동에 필요한 인텐트 객체 생성
 // 인수로 현재 객체와 전환될 화면을 담당하는 클래스를 지닌 자바 파일을 넘긴다. (코틀린 파일이어도 .java라고 한다)
 val intent=Intent(this,ResultActivity::class.java)

 // 인텐트 객체에 데이터를 저장한다. 데이터는 키와 값 쌍으로 주면 된다. 
 intent.putExtra("weight",180)
 intent.putExtra("height",70)

 // startActivity메소드가 호출됨으로써 액티비티가 전환된다. 액티비티에 intent객체를 넘긴다. 
 startActivity(intent)

< Anko 라이브러리를 사용하고 액티비티 이동을 하였을 떄!! >

startActivity<ResultActivity>("weight" to 100, "height" to 70)

네 줄이 한 줄이 되어 버립니다!!

Anko는 startActivity라는 제네릭 클래스를 가지고 있습니다.

다이아몬드 부분에 이동할 액티비티 파일 이름을 기재하고, 인수 부분에 전달할 데이터를 ‘키’와’밸류’ 형태로 작성하면 끝입니다!!

이 때, startActivity(intent) 호출은 제네릭에서 알아서 해줍니다.

< 이동된 액티비티에서 데이터를 전달받으려면? >

 val height=intent.getIntExtra("height",0)
 val weight=intent.getIntExtra("weight",0)

우리는 이전 액티비티에서 intent객체에 데이터를 저장했습니다.

Anko를 사용하지 않았을 때는 put메소드를 이용하였고, 사용했을 때는 인수를 통해 저장하였습니다.

이렇게 데이터가 저장된 인텐트는 getExtra메소드로 다시 빼낼 수도 있습니다.

intent.getIntExtra(밸류를 찾기 위한 키,밸류를 못 찾았을 때 반환할 값) 이라고 생각하면 됩니다!

만약 저장된 데이터가 정수형이면 getIntExtra를 하고, 문자열이면 getStringExtra메소드를 사용합니다.

이처럼 인텐트는 데이터 전달을 목적으로 데이터를 저장할 수 있습니다.

그런데 이 소스만 보면 아래의 의문점이 생길 수 있습니다.

‘클래스에서 매개변수로 intent를 받은 내용이 없는데 intent참조변수는 어디서 나온거야??’

우리는 전에 startActivity(intent)메소드를 통해 객체를 넘겨 주었습니다.
그리고 매개변수로 받는 부분은 코틀린에서 알아서 처리해줍니다.

(단, 매개변수 이름은 “intent”로 고정되어 있습니다.)


< 액티비티 이동 후에 추가해야될 것 >

 <activity
         android:name=".ResultActivity"
         android:parentActivityName=".MainActivity">
 </activity>

AndroidManifest에서 android:parentActivityName=”.MainActivity” 소스를 추가해
부모 액티비티가 누군지 명시하면, 액션바 좌측 상단에 ‘<-‘ 버튼이 추가됩니다.


Anko 라이브러리는 이처럼 코딩의 편리성을 제공합니다.

번외지만 토스트 위젯을 만들 때,
Toast.makeText(this,”hello”,Toast.LENGTH_SHORT).show()로 해야 될 것을
toast(“hello”)로 끝내 버립니다.

포스팅이 도움이 되셨길 바라며 이만 글을 마칩니다!!


< I use Korean to save time on lecture or explanation. If you need an explanation, please send an email or comments!! >

Leave a Reply

Your email address will not be published. Required fields are marked *