만족
[Android Studio] ButterKnife Libaray 본문
[Android Studio] ButterKnife Libaray
FrontEnd/Android Satisfaction 2018. 2. 22. 12:52다른 라이브러리를 사용하지 않고, Java Code로 View에 Listener를 추가한다면
코드는 다음과 같은 형태가 될 것이다.
View exampleView= findViewById(R.id.exampelView);
exampleView.setOnClickListner(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(getApplicatiponContext(), "Click", Toast.LENGTH_LONG).show();
}
}
만약 exampleView를 현재 메소드에서만 사용하는 것이 아니라면 외부로 다시 빼내어서
View exampleView;
// Some Codes...
exampleView= findViewById(R.id.exampelView);
exampleView.setOnClickListner(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(getApplicatiponContext(), "Click", Toast.LENGTH_LONG).show();
}
}
가 될 것이다.
단순한 리스너를 추가하기만 하더라도 코드가 상당히 길어지기 때문에, 처리해야하는 VIew가 많아지거나
혹은 적은 수량이라도 가독성을 상당히 떨어뜨릴 수 있는 요인이다.
그러나 ButterKnife Library를 사용하면 코드량을 획기적으로 줄이고,
각각의 코드마다 역할을 간결하고 명확하게 나타낼 수 있어 코드 작성 시 많은 도움이 된다.
위의 코드에 ButterKnife를 이용하면
//사실 BindView부분은 이 코드에서 필요없는 부분이기는 하다
@BindView(R.id.exampleView) View exampleView;
// Some Codes...
@OnClick(R.id.exampleView)
public void onClick(View view){
Toast.makeText(getApplicatiponContext(), "Click", Toast.LENGTH_LONG).show();
}
처럼 간단해진다.
물론 Annotation만 표기한다고 적용되는 것은 아니고
Bind해야하는 시점에 (예를 들면 onCreate) ButterKnife.bind(this); 를 호출해서 해당 값들을 할당해 주어야 한다.
먼저 ButterKnife 라이브러리를 프로젝트에 추가하기 위해
app 레벨의 gradle의 dependencies에
compile 'com.jakewharton:butterknife:8.8.1'
를 추가한다
처럼 사용하면 된다.
BindView를 이용해 Binding한 변수는 반드시 ButterKnife.bind(this) 한 뒤에 사용해야 한다.
그 전에 사용하면 Binding 되지 않은 상태이기 떄문에 NullPointerException의 향연을 볼 수 있다.
또한 ButterKnife라이브러리를 사용하여 바인딩하는 메소드와 변수는 static이거나 private 일 수 없다는 점에 유의해야 한다.
------------------------------------------
http://jakewharton.github.io/butterknife/
더 알아보고 싶다면 개발자의 페이지를 읽어보면 된다.
'FrontEnd > Android' 카테고리의 다른 글
[Android] getFragmentManager().findFragmentById() return null (0) | 2019.07.07 |
---|---|
[Android studio] 인앱 결제 구현 (0) | 2018.05.24 |
[Android Studio] Firebase I/O data type (0) | 2018.02.03 |
[Android Studio] Listener의 return 값의 의미 (0) | 2018.01.31 |
[Android Studio] ConstraintLayout (0) | 2018.01.29 |