본문 바로가기
Android/Dev

람다식(Lamda Expressions)으로 onClickListener 만들기

by featherwing 2020. 4. 11.
반응형

 

 

 

버튼을 눌렀을때 어떤 작업을 실행할 수 있도록 만드는 방법은 여러가지 방법이 있습니다. 2가지 방법만 예를 들어 본다면 아래와 같습니다.

 

 

1. 아래와 같이 매 개체 마다onClickListener를 연결


    Button mButton1, mButton2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mButton1 = findViewById(R.id.button1);
        mButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                something1();
            }
        });
        mButton2 = findViewById(R.id.button2);
        mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                something2();
            }
        });
        
    }

 

2. onClickListener 를 공통으로 사용

 
     Button mButton1, mButton2;
     
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mButton1 = findViewById(R.id.button1);
        mButton2 = findViewById(R.id.button2);
        mButton1.setOnClickListener(clickListener);
        mButton2.setOnClickListener(clickListener);
        }
        
        
 View.OnClickListener clickListener;
 
 public View.OnClickListener clickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
             case R.id.button1 :
             something1();
                
                break;
             case R.id.button1 :
             something2();
                
                break;
            }
        }
    };

 

첫번째 방법은 개체가 많아질수록 코드가 점점 더 복잡해지기 때문에 잘 사용하지 않고

 

보통은 두번째 방법을 많이 사용하게 됩니다.

 

 

다만, 개체와 리스너가 떨어져 있기 때문에 직관적이지 않습니다.

 

 

Android Studio 2.1 이상버전부터 Java8을 지원하고 Java8 부터는 Lamda식을 사용할 수 있습니다.

 

결과부터 보여드리면 아래와 같이 굉장히 간단하게 바꿀 수 있습니다.

 

예전에 버터나이프 라이브러리를 사용했을때와 같은 충격이라고 할 수 있습니다.

 

 
     Button mButton1, mButton2;
     
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mButton1 = findViewById(R.id.button1);
        mButton2 = findViewById(R.id.button2);
        mButton1.setOnClickListener(v -> something1());
        mButton2.setOnClickListener(v -> something2());
        }
        
        

 

 

안드로이드 스튜디오에서 람다식을 사용할 수 있도록 하려면 app단의 build.gradle에 다음 내용을 추가해주면 됩니다.

 

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

 

자세한 내용은 안드로이드 개발자 문서를 참고 해 주세요.

 

반응형

댓글