코딩스토리

[Android]유용한 라이브러리 - Butter Knife사용법 본문

Android/유용한 기술

[Android]유용한 라이브러리 - Butter Knife사용법

라크라꾸 2019. 12. 11. 01:00

안드로이드에서 가장 먼저 해야할 일은 xml레이아웃을 만들고 나서 해당 View를 설정하는 것입니다.

 

보통 아래와 같이 View를 선언해주고 onCreate부분에 바인딩을 해줄것입니다.

 


    LinearLayout ll_toolbar;
    Button btn_send;
    Button btn_finish;
    EditText et_text;


    ...


    ll_toolbar = findViewById(R.id.ll_toolbar);
    btn_send = findViewById(R.id.btn_send);
    btn_finish = findViewById(R.id.btn_finish);
    et_text = findViewById(R.id.et_text);
    

이런 방식으로 사용하게 되면 View가 10개면 10번, 100개면 100번 선언해주고 바인딩해줘야하는 번거로움이 있습니다.

 

ButterKnife를 사용하면 이 코드를 좀 더 간결하고, 선언하고 바인딩해주는 번거로움을 줄일 수 있습니다.

 

ButterKnife 사용법

build.gradle(Module:app) 


dependencies {
    implementation 'com.jakewharton:butterknife:8.7.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
}

 

gradle에 ButterKnife 라이브러리를 추가해줍니다.

 

 

View객체 선언

    
    @BindView(R.id.ll_toolbar)
    LinearLayout ll_toolbar;
    @BindView(R.id.btn_send)
    Button btn_send;
    @BindView(R.id.btn_finish)
    Button btn_finish;
    @BindView(R.id.et_text)
    EditText et_text;
    

@BindView를 이용해서 해당 View의 Id를 설정해주면서 객체를 선언해줍니다.

 

View Bind

- Activity에서의 바인딩

        
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this,this);
        

 

- Fragment에서의 바인딩


    View view = inflater.inflate(R.layout.fragment_like_list, container, false);
    ButterKnife.bind(this,view);
    

 

- ViewHolder에서의 바인딩 (주로 Recyclerview, ViewPager에서 사용됩니다.)

    
    public ViewHolderLikelist(@NonNull View itemView) {
        super(itemView);
        ButterKnife.bind(this,itemView);
    }
    

여기서 데이터 바인딩을 해줌으로서 기존에 하나씩 바인딩 했던것과는 달리 한번에 선언한 객체들을 바인딩 할 수 잇습니다.

 

Listener사용

    
    @OnTextChanged(R.id.et_text)
    void onTextChange(){
        ...
    }

    @OnClick(R.id.btn_finish)
    void onFinish(){
        ...
    }
    

기존에는 리스너를 implements를 하고 이벤트를 Override하여 사용하였는데 Butterknife를 사용하면 리스너를 선언해 줄 필요 없이 바로 실행될 수 있는 함수를 만들고 다음과 같이 사용하면 됩니다.

 

    
    @OnClick({R.id.btn_finish,R.id.btn_send})
    void onFinish(){
        ...
    }
    

여러 View에서 하나의 이벤트를 실행시키고 싶다면 위와같이 선언할 수 있습니다.

Comments