본문 바로가기

안드로이드/Guide

안드로이드 개발 - (8) View의 Listener 활용 - OnClickListener, OnLongClickListener

안드로이드에서의 이벤트 중 가장 간단한 OnClickListener에 대해 알아보고자 한다.

OnClickListener는 뜻 그대로 View를 클릭했을 때 발생하는 이벤트이다.

우리는 앱과의 상호작용에서 버튼을 클릭하거나, 길게 누르거나 스크롤을 조작하는 등의 활동을 한다.

이 때 안드로이드에서는 해당 상호작용에 대한 이벤트를 Callback한다. 이벤트가 발생할 때 처리할 로직을 작성하는 부분이 바로 각 Listener들이다.

 

1. OnClickListener

먼저 간단한 OnClickListener에 대해 알아볼 것이다. 기능은 명칭 그대로 View를 클릭했을 때 작동하는 인터페이스로 대상 View에 리스너를 설정하여 사용이 가능하다.

 

OnClickListener는 View에 정의된 인터페이스로 아래와 같이 정의되어 있다.

public class View implements Callback, android.view.KeyEvent.Callback, AccessibilityEventSource {
	...
    public interface OnClickListener {
        void onClick(View var1);
    }
    ...
}

그리고 View에 OnClickListener를 설정해줄 경우 setOnClickListener() 메서드를 통해 설정해주면 된다.

public void setOnClickListener(@Nullable View.OnClickListener l)

 

아래는 사용 예시이다.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView = findViewById<TextView>(R.id.tv_hello_world)
        findViewById<Button>(R.id.btn_click_ex).run {
            setOnClickListener { view ->
                //TODO 클릭 이벤트 발생 시 처리 로직 작성
            }
        }
    }
}

 

2. OnLongClickListener

OnLongClickListener는 View를 길게 누를 때 작동하는 인터페이스로 해당 View에 설정하여 사용하면 된다.

public class View implements Callback, android.view.KeyEvent.Callback, AccessibilityEventSource {
	...
    public interface OnLongClickListener {
        boolean onLongClick(View var1);
    }
    ...
}
public void setOnLongClickListener(@Nullable View.OnLongClickListener l)

 

아래는 사용예시이다.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView = findViewById<TextView>(R.id.tv_hello_world)
        findViewById<Button>(R.id.btn_click_ex).run {
            setOnLongClickListener { view ->
                //TODO 롱클릭(길게 누름) 이벤트 발생 시 처리 로직 작성
            }
        }
    }
}