달나라 노트

Android Studio - setOnClickListener (버튼 클릭 시 수행할 동작 지정하기) 본문

Android

Android Studio - setOnClickListener (버튼 클릭 시 수행할 동작 지정하기)

CosmosProject 2021. 3. 23. 00:23
728x90
반응형

 

 

 

 

이번엔 버튼을 누르면 TextView의 글자가 바뀌도록 해봅시다.

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/result_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="36sp"
        android:text="This is test text."
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

    <Button
        android:id="@+id/button_test_change"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="#676767"
        android:text="Button"
        android:textColor="#8CB3FF"
        app:layout_constraintTop_toBottomOf="@id/result_text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

 

 

MainActivity.kt

package com.example.diceroller

import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.diceroller.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        var btn_change: Button = findViewById(R.id.button_test_change)
        btn_change.setOnClickListener() {
            text_change()
        }
    }

    fun text_change() {
        var textview_result: TextView = findViewById(R.id.result_text)

        textview_result.text = "New text"
    }
}

위 코드는 binding을 (binding 설정은 해 두었지만) 사용하지 않고 findViewById를 사용한 예시입니다.

 

버튼에 기능을 부여하는 흐름은 다음과 같습니다.

1. MainActivity class 내부에 버튼의 기능을 담은 function을 생성한다.

2. MainActivity class 내부의 onCreate function 속에 원하는 button의 view를 불러와 객체를 생성한다.

3. 해당 버튼 객체의 setOnClickListener에 1번에서 생성한 function을 넣어준다.

 

위 코드를 보면 test_change라는 함수는 result_text id인 textview의 글자를 New text로 설정하도록 하고 있습니다.

 

그리고 이 function을 setOnClickListener에 등록하고있죠.

 

 

 

 

 

 

 

package com.example.diceroller

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.diceroller.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.buttonTestChange.setOnClickListener() {
            text_change()
        }
    }

    fun text_change() {
        binding.resultText.text = "New text"
    }
}

binding view를 사용하면 좀 더 간단해집니다.

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments