APP

안드로이드(Android) 내부 클래스(Inner class)를 이용한 이벤트 처리

isaac.kim 2020. 4. 23. 17:10
728x90
반응형

안드로이드(Android) 내부 클래스(Inner class)를 이용한 이벤트 처리

 

안드로이드에서 이벤트를 처리하는 방법에는 다양하게 있습니다.

이번 포스팅은 내부 클래스를 이용한 이벤트 처리 방법에 대해서 알아보겠습니다.

레이아웃은 다음과 같습니다.

 

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

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼"
        android:padding="10dp" />

</LinearLayout>

 

 

다음은 MainActivity.java의 소스코드입니다.

 

package com.example.buttonevent1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
     
    /* 내부 클래스
    * MainActivity 클래스 안에 MyListenerClass라는 이름의 내부 클래스를 정의한다.
    * 이 클래스는 OnClickListener 인터페이스를 구현하는 클래스로서 클릭 이벤트가 발생하면
    * 호출되는 onClick()만을 가지고 있다.
    * 사용자가 화면을 클릭하면 토스트(toast) 메시지 기능을 이용하여서 
    * 화면 하단에 메시지를 표시한다.
    * */
    class MyListenerClass implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "안녕하세요. 내부 클래스입니다."
            , Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 레이아웃에 작성된 버튼 객체를 찾는다.
        Button button = (Button) findViewById(R.id.button); 

        /*
        * 버튼에서 발생하는 클릭 이벤트를 처리할 객체를 생성한다.
        * setOnClickListener()를 이용하여 이 객체를 버튼의 클릭 리스너로
        * 등록하여 주면 된다. 만약 버튼이 클릭되면 클릭 리스너가 가지고 있는
        * onClick() 메소드가 호출된다.
        * */
        MyListenerClass buttonListener = new MyListenerClass();
        button.setOnClickListener(buttonListener);
    }

}

 

 

728x90
반응형