[ButterKnife] View나 resource 초기화를 깔끔하게 처리해줍니다~

view inflate 버터나이프

ButterKnife 다들 많이 사용하시나요?

저는 왠만하면 안드로이드 순정 라이브러리를 사용하려 노력하는 편이지만,

이것만은 계속 쓰게 되더군요!


바로 ButterKnife 라고 쓰고 버터나이프라고 읽는 라이브러리 인데요,


이게 어디에 써먹는거냐면


activity를 생성하고 layout 과 연결시켜준 뒤,

반드시 widget 들을 findViewId 로 일일히 할당해줘야 하는 수고가 필요한데요.


ButterKnife는 변수 선언과 동시에 할당을 해줍니다!


예를 들어보면 기존에는


  private TextView tvTitle;
  private TextView tvName;
  private TextView tvRank;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    init();
  }

  private init() {
      mTextView = findViewById(R.id.tvTitle);
      tvName = findViewById(R.id.tvName);
      tvRank = findViewById(R.id.tvRank);
  }


위의 코드 처럼 반드시 widget 들을 초기화 해주는 코드가 들어가야 하지요.

아.. 지저분합니다.. UI가 복잡할 수록 저거 정말 지저분해보여요.


하지만 ButterKnife 를 사용하면 매우 깔끔해집니다.


  @BindView(R.id.tvTitle);
  private TextView tvTitle;
 
  @BindView(R.id.tvName);
  private TextView tvName;

  @BindView(R.id.tvRank);
  private TextView tvRank;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
  }

위의 코드처럼 어노테이션을 사용해서 변수와 ViewId 와 연결시켜 놓고,
적절한 위치에 ButterKnife.bind(this); 만 해주면 알아서 객체가 메모리에 할당되게 됩니다.

참 쉽고 깔끔하죠!


뿐만 아니라 drawable 리스소도 어노테이션 한방으로 할당이 가능하구요~
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; // int or ColorStateList field


각종 listener 도 깔끔하게 등록이 가능합니다~

  @OnClick(R.id.submit)
  public void submit(View view) {
    // TODO submit data to server...
  }

더 자세한 예제와 사용방법등을 알고 싶으시다면 아래 url 로 이동하셔서 보시면 됩니다.ㅎㅎ

http://jakewharton.github.io/butterknife/



이미 많은 분들이 알고 계실 수도 있지만 혹시 모르고 계신 분이 계시면 도움이 되실까 해서 올려봅니다~

감사합니다!

서영승 7년전 질문


댓글 1

좋아요 ;)

이영찬 7년전 답변

0

댓글작성

목록보기