본문 바로가기
App/Android Studio

Android Studio - OnClickListener 이벤트 리스너

by 코젼 2022. 8. 3.
728x90
반응형

2022-08-03(32일차)


💡OnClickListener, onClick()

◾ 클릭 이벤트 발생 시 


📃버튼을 누르면 Toast 메시지를 띄운다.

📝layout.xml - 공통

<?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/btn_01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginBottom="5dp"
        android:background="@color/purple_200"
        android:text="1"
        android:textSize="30dp" />

    <Button
        android:id="@+id/btn_02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@color/purple_200"
        android:text="2"
        android:textSize="30dp" />

    <Button
        android:id="@+id/btn_03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@color/purple_200"
        android:text="3"
        android:textSize="30dp" />
</LinearLayout>

📃OnClickListener 구현 방법 1

◾ View.OnClickListener 객체를 따로 만들어서 안에서 추상 메소드를 구현한다.

◾ 만든 listener를 변수에 저장한 후 호출해서 사용한다.

📝MainActivity.java

package com.example.eventstudy;

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 {

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

        Button btn1 = findViewById(R.id.btn_01);
        btn1.setOnClickListener(listener);

    }

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "onclick 1", Toast.LENGTH_SHORT).show();
        }
    };
}

📃OnClickListener 구현 방법 2

◾ 버튼 객체에서 setOnClickListener를 호출함과 동시에 onClick 함수를 같이 정의한다.

📝MainActivity.java

package com.example.eventstudy;

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 {

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

        Button btn2 = findViewById(R.id.btn_02);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "onClick 2", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

📃OnClickListener 구현 방법 3

◾ implements View.OnClickListener로 인터페이스를 상속받는다.

◾ 내부에서 onClick함수를 정의하고 this로 호출하여 사용한다.

📝MainActivity.java

package com.example.eventstudy;

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 implements View.OnClickListener{

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

        Button btn3 = findViewById(R.id.btn_03);
        btn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "onClick 3", Toast.LENGTH_SHORT).show();
    }
}

📃OnClickListener 구현 방법 4

◾ xml파일에서 onClick속성을 이용해서 정의하고 java에서 같은 이름으로 메소드를 생성해서 사용한다.

📝layout.xml

<Button
    android:id="@+id/btn_04"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="4"
    android:onClick="onBtnClick"/>

📝MainActivity.java

public void onBtnClick(View view) {
    Toast.makeText(MainActivity.this, "onBtnClick", Toast.LENGTH_SHORT).show();
}

💡전체 소스코드 정리

📝layout.xml

<?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"
    android:padding="20dp">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:id="@+id/btn_01"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2"
        android:id="@+id/btn_02"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3"
        android:id="@+id/btn_03"
        />

</LinearLayout>

📝MainActivity.java

package com.example.listenerevent;

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 implements View.OnClickListener{

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

        Button btn1 = findViewById(R.id.btn_01);
        Button btn2 = findViewById(R.id.btn_02);
        Button btn3 = findViewById(R.id.btn_03);

        btn1.setOnClickListener(listener);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "onClick 2", Toast.LENGTH_SHORT).show();
            }
        });
        btn3.setOnClickListener(this);
    }

    View.OnClickListener listener = new View.OnClickListener() {
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "onClick 1", Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "onClick 3", Toast.LENGTH_SHORT).show();
    }
}
728x90
반응형

댓글