728x90
반응형
버튼을 눌렀을때 어떤 작업을 실행할 수 있도록 만드는 방법은 여러가지 방법이 있습니다. 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
}
자세한 내용은 안드로이드 개발자 문서를 참고 해 주세요.
728x90
반응형
'Android > Dev' 카테고리의 다른 글
NestedScrollView - ScrollView 와 RecyclerView 사용시의 오류 해결 (2) | 2020.04.23 |
---|---|
Google Drive API 사용시 untitled 파일만 생성될 때 (0) | 2020.04.14 |
toString과 String.valueOf 의 차이점 (0) | 2020.04.04 |
LayoutParams의 사용시 주의점, Dp를 Px로 변환하기 (0) | 2020.04.03 |
Layout의 위치를 xml이 아닌 Code를 통해 조절하기 (0) | 2020.04.01 |
댓글