본문 바로가기
모바일/Kotlin

[Kotlin] 코틀린 안드로이드 리스너 개념 및 코드

by drCode 2021. 4. 27.
728x90
반응형

안드로이드 리스너

 

리스너란? 

  : 뷰에서 발생하는 이벤트에 대해 작업을 처리해주는 곳

 

리스너에서 사용하는 익명함수를 구현할 때

(1) 람다방식

(2) 익명함수 방식

(3) 이름을 명시하는 방식

 

익명함수/클래스
 - 이름이 없는 함수/클래스
 - 이름을 만들어 줄 필요가 없다.
 - 한번만 사용한다.

 

(1) Empty Activity 생성

패키지 -> New -> Activity -> Empty Activity

 

이름 지정 후 Finish

 

 

activity_listener.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Listener">

    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="hello"
        android:id="@+id/hello" />

</LinearLayout>

 

생성된 activity_listener.xml 태그명 변경

orientation 추가

 

manifests / AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">

        <activity android:name=".Listener">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity">
<!--            <intent-filter>-->
<!--                <action android:name="android.intent.action.MAIN" />-->

<!--                <category android:name="android.intent.category.LAUNCHER" />-->
<!--            </intent-filter>-->
        </activity>
    </application>

</manifest>

기존 것의 intent-filter 주석처리 후 액티비티 연결 변경

 

Listener.kt

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.TextView


class Listener : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_listener)

        // 뷰를 Activity로 가져오는 방법
        // 1> 직접 찾아서 가져온다
        val textView : TextView = findViewById(R.id.hello)
        // 2> xml을 import해서 가져온다.

        // 익명함수
        // 1 -> 람다 방식
        textView.setOnClickListener {
            Log.d("click", "Click!!")
        }

        // 2 -> 익명 함수 방식
        textView.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                Log.d("click", "Click!!")
            }
        })

        // 3 -> 이름이 필요한 경우(click)
        val click = object : View.OnClickListener {
            override fun onClick(v: View?) {

            }
        }

        textView.setOnClickListener(click)


    }
}

리스너 등록

728x90
반응형

댓글