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!! >