티스토리 뷰
방법 1: 익명 클래스로 리스너 바로 전달
동작 개요
텍스트 뷰 클릭 시 텍스트 뷰의 배경색을 GREEN으로 변경
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:laytout_height="match_parent"
android:text="♥"
android:textSize="50sp"
android:gravity="center" />
MainActivity.java
- t.setOnClickListener 호출 시, OnClickListener 객체를 직접 익명 클래스로 구현하여 즉시 전달
- 한 번만 사용되는 이벤트 리스너를 즉석으로 정의할 때 사용하는 방식
package com.example.test;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t = findViewById(R.id.tv);
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.GREEN);
}
});
}
}
방법 1+: 람다식으로 표현하기
MainActivity.java
- setOnClickListener 메서드는 View.OnClickListener 인터페이스를 구현한 객체만을 받을 수 있도록 설계됨
- View.OnClickListener은 onClick이라는 추상 메서드가 하나만 있는 인터페이스
- 람다식은 함수형 인터페이스(추상 메서드가 하나만 있는 인터페이스)에 대한 익명 클래스 생성을 간결하게 표현할 수 있는 방식
package com.example.test;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t = findViewById(R.id.tv);
t.setOnClickListener(v -> v.setBackgroundColor(Color.GREEN));
}
}
결과는 방법 1과 같음
방법 2: 리스너를 로컬 변수로 정의하여 전달
동작 개요
텍스트 뷰 클릭 시 텍스트 뷰의 배경색을 BLUE로 변경
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:laytout_height="match_parent"
android:text="♥"
android:textSize="50sp"
android:gravity="center" />
MainActivity.java
- 리스너 객체를 별도의 변수 l로 미리 정의한 후, t.setOnClickListener(l)에서 전달
- 리스너 객체를 여러 곳에서 재사용하거나 명확하게 관리하고 싶을 때 사용할 수 있는 방식
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t = findViewById(R.id.tv);
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.BLUE);
}
};
t.setOnClickListener(l);
}
}
방법 2+: 람다식으로 표현하기
MainActivity.java
- setOnClickListener 메서드는 View.OnClickListener 인터페이스를 구현한 객체만을 받을 수 있도록 설계됨
- View.OnClickListener은 onClick이라는 추상 메서드가 하나만 있는 인터페이스
- 람다식은 함수형 인터페이스(추상 메서드가 하나만 있는 인터페이스)에 대한 익명 클래스 생성을 간결하게 표현할 수 있는 방식
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t = findViewById(R.id.tv);
View.OnClickListener l = (v) -> {v.setBackgroundColor(Color.BLUE); };
t.setOnClickListener(l);
}
}
결과는 방법 2와 같음
방법 3: 리스너를 별도의 클래스로 분리
동작 개요
텍스트 뷰 클릭 시 텍스트 뷰의 배경색을 YELLOW로 변경
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:laytout_height="match_parent"
android:text="♥"
android:textSize="50sp"
android:gravity="center" />
MainActivity.java
- t.setOnClickListener()에서 직접 설정한 별도의 클래스 사용
package com.example.test;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t = findViewById(R.id.tv);
t.setOnClickListener(new MyTextView_ClickListener());
}
}
MyTextView_ClickListener.java
- OnClickListener 인터페이스를 구현한 별도의 파일에서 리스너 정의
- 해당 리스너 클래스를 여러 곳에서 재사용하기 편함
package com.example.test;
import android.graphics.Color;
import android.view.View;
public class MyTextView_ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.YELLOW);
}
}
방법 4: 액티비티 자체에 리스너 인터페이스 구현
동작 개요
텍스트 뷰 클릭 시 텍스트 뷰의 배경색을 CYAN으로 변경
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:laytout_height="match_parent"
android:text="♥"
android:textSize="50sp"
android:gravity="center" />
MainActivity.java
- implements View.OnClickListener로 해당 인터페이스 구현
- t.setOnClickListener을 통해 액티비티 자체를 리스너로 설정하여 MainActivity 내에서 클릭 이벤트 처리
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t = findViewById(R.id.tv);
t.setOnClickListener(this);
}
@Override
public void onClick(View v) {
v.setBackgroundColor(Color.CYAN);
}
}
'학업 > 모바일프로그래밍' 카테고리의 다른 글
[Android Studio] 클릭하면 화면의 숫자가 1 늘어나는 앱 구현(no XML) (0) | 2024.10.23 |
---|---|
[Android Studio] 평수 계산기, 덧셈 · 뺄셈 계산기 구현 (0) | 2024.10.21 |
[Android Studio] LinearLayout 수직 배치하기 연습 (0) | 2024.10.20 |
[Android Studio] 화면에 텍스트 여러 개 표시하기 (0) | 2024.10.19 |
[Android Studio] 화면에 텍스트 표시하기 (1) | 2024.10.17 |
공지사항
링크