Android:OnClick 구현의 4가지 방법

Ji·2021년 8월 15일
0

OnClick에 대해 좋은 블로그 글 (https://nanstrong.tistory.com/274) 이 있어서 공부하고 요약한 내용을 정리해본다.

OnClick 메소드

  • OnClickListener interface에 정의되어 있음.

1. View.OnClickListener을 implements

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private Button btn2;

    private View view1;
    private View view2;

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

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

        view1 = findViewById(R.id.view1);
        view2 = findViewById(R.id.view2);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.btn1 :
                view1.setVisibility(View.VISIBLE);
                view2.setVisibility(View.GONE);
                break;
            case R.id.btn2 :
                view1.setVisibility(View.GONE);
                view2.setVisibility(View.VISIBLE);
                break;
        }
    }
}

//출처: https://nanstrong.tistory.com/274
  • View.OnClickListener을 implements하여 OnClick메서드를 구현.
  • 가장 많이 사용하는 방식이라고 함.

View.OnClickListener?

  • View 클래스 내부 인터페이스.
  • 버튼을 클릭 or 화면 전체(레이아웃) 클릭 등의 View를 클릭할 때 처리할 이벤트를 담당하는 리스너.
  • 리스너를 사용할 때 반드시 onClick() 메소드를 재 정의해야함.

2. View의 인자에 리스너를 바로 구현

package test.com.exam;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity{

    private Button btn1;
    private Button btn2;

    private View view1;
    private View view2;

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

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

        view1 = findViewById(R.id.view1);
        view2 = findViewById(R.id.view2);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view1.setVisibility(View.VISIBLE);
                view2.setVisibility(View.GONE);
                
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view1.setVisibility(View.GONE);
                view2.setVisibility(View.VISIBLE);
            }
        });
    }
}


// 출처: https://nanstrong.tistory.com/274 [D의 개발공간(일하면서 공부하면서 끄적끄적)]
  • 1번과 더불어 많이 사용하는 방식.
  • 구현 이벤트 수가 적을 경우 & 리스너를 재사용하지 않을 경우 사용

3. 리스너를 객체로 선언해두고 set

package test.com.exam;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity{

    private Button btn1;
    private Button btn2;

    private View view1;
    private View view2;

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

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

        view1 = findViewById(R.id.view1);
        view2 = findViewById(R.id.view2);

        btn1.setOnClickListener(btn1Listener);
        btn2.setOnClickListener(btn2Listener);
    }

    View.OnClickListener btn1Listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view1.setVisibility(View.VISIBLE);
            view2.setVisibility(View.GONE);
        }
    };

    View.OnClickListener btn2Listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view1.setVisibility(View.GONE);
            view2.setVisibility(View.VISIBLE);
        }
    };


// 출처: https://nanstrong.tistory.com/274 [D의 개발공간(일하면서 공부하면서 끄적끄적)]

4. 버튼을 객체로 생성

   public void onClick1(View v) {
        view1.setVisibility(View.VISIBLE);
        view2.setVisibility(View.GONE);

    }

    public void onClick2(View v) {
        view1.setVisibility(View.GONE);
        view2.setVisibility(View.VISIBLE);

    }
}


// 출처: https://nanstrong.tistory.com/274 [D의 개발공간(일하면서 공부하면서 끄적끄적)]
  • 코드와 뷰를 담당하는 레이아웃간의 의존성이 심해진다고 함. (잘 사용 안하는 추세)

출처 : https://nanstrong.tistory.com/274

profile
공부방

0개의 댓글

관련 채용 정보