일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- R데이터분석
- 개발
- 다른테이블에속해있습니다
- javaScriptError
- Android
- 파이썬
- 자바스크립트수학
- speechAPI
- speechtoText
- 이행은이미다른
- 자바스크립트날짜형식
- 청소년복지론
- 장고프로젝트
- 장고웹프로젝트
- forof문
- 자바스크립트for문
- 자바스크립트forinforof차이
- 장고웹
- Python
- 자바스크립트날짜
- PostgreSQL
- 사례관리
- 장고
- 안드로이드
- sqlite
- webkitrecognition
- 이행은이미다른테이블에속해있습니다
- 오류종류
- 자바스크립트날짜get
- cmd명령어
- Today
- Total
EMDI는 지금도 개발중
Android with Kotlin : 안드로이드 기초편 - Intent 기초 setOnClickListener 이벤트 본문
Android with Kotlin : 안드로이드 기초편 - Intent 기초 setOnClickListener 이벤트
EMDI 2020. 9. 21. 09:51
저번 글에서는 회원가입 화면을 만드는 UI에 관련된 내용을 다루어보았습니다. 이번 글에서는 코틀린의 이벤트처리에 대해 배워보도록 하겠습니다.
이벤트명 | 개념 | 사용법 |
setOnClickListener | 사용자가 해당 버튼을 누르면 실행할 내용을 지정해주는 코드 | 이벤트를붙여줄버튼.setOnClickListener { // 버튼이 눌리면 실행 해줄 코드들을 작성. } |
Intent | 하나의 액티비티에서 다른 액티비티를 불러낼 때 사용하는 코드(이동) | val myIntent(변수이름변경가능) = Intent(출발지this, 도착액티비티::class.java) startActivity(myIntent) |
* 연습내용 : MainActivity(로그인화면)에서 가입하기 버튼을 클릭했을 때 새로 생성한 JoinActivity(회원가입화면)으로 이동하는 로직을 짜보겠습니다. 해당 연습에서는 button을 클릭할 때 이벤트를 발생시켜야하고, 화면 이동도 필요합니다.
<!-- activity_main.xml (로그인화면) -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="15dp"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/dolphin_logo_01" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="아이디"
android:layout_marginTop="20dp"
android:textSize="18sp"/>
<EditText
android:id="@+id/idEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이메일 양식으로 입력"
android:inputType="textEmailAddress"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="비밀번호"
android:layout_marginTop="25dp" />
<EditText
android:id="@+id/pwEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호 입력"
android:inputType="textPassword"/>
<Button
android:id="@+id/loginBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그인" />
<TextView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/joinBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="가입하기" />
</LinearLayout>
<!-- activity_join.xml (회원가입화면) -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="top"
android:padding="15dp"
android:background="#FFFFFF"
tools:context=".JoinActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="아이디"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textStyle="bold"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이메일 양식으로 입력하세요."
android:inputType="textEmailAddress"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textStyle="bold"
android:text="비밀번호"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호를 입력하세요."
android:inputType="textPassword" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textStyle="bold"
android:text="닉네임"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="한글/영어 등을 한 줄로 입력하세요."
android:singleLine="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textStyle="bold"
android:text="추천인"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="추천한 사람의 닉네임으로 검색하세요. (준비중)"
android:singleLine="true"
android:enabled="false"
android:imeOptions="actionSearch"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="만 14세 미만" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="만 14세 이상" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="외국인" />
</RadioGroup>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="이용약관에 동의합니다."
android:checked="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="마케팅 활용에 동의합니다."/>
<TextView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/dolphin_logo_01"
android:scaleType="centerCrop"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="취소"/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="회원가입"/>
</LinearLayout>
</LinearLayout>
앞서 말씀드렸다시피 처음 Main화면에 들어왔을 때 가입하기 버튼을 클릭하면 2번째 페이지(회원가입)화면으로 이동하는 setOnClick이벤트입니다. 안드로이드 / 코틀린에서는 setOnClickListener을 사용해서 이벤트를 태웁니다.
// MainActivity.kt
package com.example.myappwithgit
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 가입하기 버튼을 눌렀을 때 회원가입화면으로 이동하게 버튼 클릭이벤트 만들기
joinBtn.setOnClickListener {
// 가입하기 버튼을 누르면 들어오는 로직
// 회원가입(JoinActivity) 화면으로 이동하게 Intent 사용
val myIntent = Intent(this, JoinActivity::class.java)
// startActivity를 해야 화면이동
startActivity(myIntent)
}
}// onCreate
}
// JoinAcitivity.kt
package com.example.myappwithgit
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_join.*
class JoinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_join)
cancelBtn.setOnClickListener {
// MainActivity에서 넘어온 Activity를 종료하고 싶으면
finish()
}
}
}
위의 소스와 같이 사용하시면 화면이동하는 모습을 확인하실 수 있습니다.
※ kotlinx.android.synthetic.main.activity_main.*이 없어서 연결이 안된다면 아래와 같이 해결하시면 됩니다.
app > build.gradle로 들어가서 plugins에 'kotlin-android-extensions'를 추가합니다. 그리고 망치모양의 Sync Now(=Make Project)로 다시 빌드하면 됩니다.
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-android'
id 'kotlin-android-extensions' // 해당 내용 추가
}
[2023-04-26기준] 위와 같이 해결하고자 하였으나, The 'kotlin-android-extensions' Gradle plugin is no longer supported. 라는 또다른 오류가 발생하네요. 더이상 extensions 플러그인을 서포트하지 않는다는 오류인데 3년 전에 사용했던 플러그인이라 지금 기준에서는 어떻게 바뀌었는지 구글링이 필요할 것 같습니다.
'네이티브 > Android' 카테고리의 다른 글
Android with Kotlin : 안드로이드 기초편 - Intent 활용 전화걸기, 문자발송, 인터넷연결 등 (0) | 2020.09.21 |
---|---|
Android with Kotlin : 안드로이드 기초편 - Intent 활용 데이터 함께 화면전환 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 기초편 - 회원가입 화면(UI) 만들기 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 스튜디오 GitHub 연동해서 소스관리 (0) | 2020.09.21 |
Android with Kotlin : 안드로이드 스튜디오 설치하기 with 코틀린 시작 (0) | 2020.09.16 |