본 글은 스파르타 코딩 클럽의 "안드로이드 앱개발 기초반" 강의를 듣고 작성한 개발일지입니다.
지난 시간엔 성격 타입 중 ISTJ에 대해서만 새로운 액티비티(Acitivity)를 만들어 데이터를 전달하고 받았습니다. 이번엔 다른 성격 타입에 대해서도 동일한 과정을 적용해보겠습니다.
먼저 New > Activity > Empty Activity 를 통해 새로운 액티비티를 생성합니다. 이후 새롭게 만들어진 activity_isfj.xml 파일에 아래 코드를 추가합니다.
// activity_isfj.xml
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="용감한 수호자"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
이후 MainActivity.kt 에서 버튼 동작을 구현해보겠습니다.
fun clickIsfj(view: View) {
Toast.makeText(view.context, "진정한 데이터 분석가", Toast.LENGTH_LONG).show()
}
위에서 추가한 clickIsfj 함수를 ISFJ 버튼에 연결할 차례입니다.
<Button
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_margin="4dp"
android:onClick="clickIsfj" // 추가
android:text="ISFJ" />
ISFJ 버튼을 클릭하면 데이터와 함께 새롭게 생성한 IsfjActivity 를 실행해보겠습니다.
//MainActivity.kt
fun clickIsfj(view: View) {
//Toast.makeText(view.context, "진정한 데이터 분석가", Toast.LENGTH_LONG).show()
var intent = Intent(this, IsfjActivity::class.java)
intent.putExtra("PersonalKey", "ISFJ")
startActivity(intent)
}
액티비티에 전달받은 데이터를 토스트로 보여주기 위해 putExtra 로 보낸 데이터를 받아보겠습니다.
//IsfjActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_isfj)
var personalKey = intent.getStringExtra("PersonalKey") // 추가
Toast.makeText(this, personalKey, Toast.LENGTH_LONG).show() // 추가
}
마지막으로 토스트 메시지를 IsfjActivity 에서 TextView 로 바꿔보겠습니다.
//IsfjActivity.kt
class IsfjActivity : AppCompatActivity() {
private lateinit var textView: TextView // 추가
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_isfj)
var personalKey = intent.getStringExtra("PersonalKey")
//Toast.makeText(this, personalKey, Toast.LENGTH_LONG).show()
textView = findViewById(R.id.textView) // 추가
textView.text = personalKey // 추가
}
}
모든 성격의 유형에 대해 위와 같은 과정을 하나하나 반복하면 너무 귀찮겠죠. 반복되는 작업은 어느 언어나 프레임워크든 코드로 구현할 수 있다는 생각이 듭니다. 이를 위해선 공통적인 패턴을 찾아보겠습니다.
fun clickIstj(view: View) {
// Toast.makeText(view.context, "진정한 데이터 사이언티스트", Toast.LENGTH_LONG).show()
var intent = Intent(this, lstjActivity::class.java)
intent.putExtra("PersonalKey", "ISTJ")
startActivity(intent)
}
fun clickIsfj(view: View) {
// Toast.makeText(view.context, "진정한 데이터 전문가", Toast.LENGTH_LONG).show()
var intent = Intent(this, IsfjActivity::class.java)
intent.putExtra("PersonalKey", "ISFJ")
startActivity(intent)
}
intent.putExtra("PersonalKey", "성격유형")
위에서 빨간색으로 표시한 부분 이외에는 모두 공통 부분입니다. 빨간색만 어떻게 바꿀지 생각해봅시다. 어차피 성격 유형 버튼을 눌러서 해당 성격을 TextView 로 나타내게 할 것이므로 버튼 정보를 그대로 가져와보면 어떨까요?
위 함수에서 (view: View) 는 onClick 을 발생시킨 view의 정보를 담고 있습니다. xml 파일을 보면 버튼(Button)에 android:onClick="clickIstj" 로 연결되어 있으니 해당 버튼의 정보를 담고 있을 것입니다.
fun clickIstj(view: View) {
var button = view as Button // 추가
var intent = Intent(this, lstjActivity::class.java)
intent.putExtra("PersonalKey", button.text) // 변경
startActivity(intent)
}
as 는 타입을 변경해서 사용하겠다는 코틀린 문법으로, "타입 캐스팅" 이라고 부릅니다.
Button이 View의 하위 개념이라 타입 캐스팅이 가능한 것입니다.
이제 xml 파일에서 모든 버튼에 android:onClick="clickIstj" 를 추가해주면 됩니다. 이 역시 단순 반복을 대체할 방법이 있지만 관련해서는 나중에 고민하고 현재는 하나하나 넣어주도록 하죠.
이렇게 하면 모든 버튼을 눌러도 그 버튼의 내용대로 텍스트가 나타나게 됩니다.
코틀린에는 위에서 미리 선언한 함수 이름이나 파일 이름을 손쉽게 바꾸는 방법이 있습니다. 약 16개 버튼이 있는데 이를 하나하나 수정하는 것은 시간 낭비겠죠.
위의 함수 clickIstj 를 clickTypeButton 이란 이름으로 바꾸고 싶다면 커서를 clickIstj 위에 놓고 오른쪽 마우스 클릭을 합니다. Refactor -> Rename 후 원하는 이름으로 바꾸면 해당 함수가 위치한 곳에서 모두 일괄 변경됩니다. 파일 역시 마찬가지로 파일 오른쪽 클릭 후 동일한 과정을 거치면 됩니다.
'문돌이 존버 > 앱 개발 스터디' 카테고리의 다른 글
코틀린(kotlin) - seekbar 활용 앱 검사 화면 만들기 (0) | 2021.07.11 |
---|---|
코틀린(kotlin) - 웹 페이지를 보여주는 웹뷰(WebView) 다루기 (0) | 2021.07.11 |
코틀린(kotlin) - 새로운 액티비티(Activity) 시작하기 (0) | 2021.07.08 |
코틀린(kotlin) - 뷰 정보를 활용해 동작 구현하기 (0) | 2021.06.27 |
코틀린(Kotlin) 기초 문법 배우기 (2) (0) | 2021.06.27 |