정상에서 IT를 외치다

[Android, Butterknife] 버터나이프 추상화 본문

안드로이드

[Android, Butterknife] 버터나이프 추상화

Black-Jin 2018. 10. 12. 17:01
반응형


안녕하세요. 블랙진입니다.


안드로이드 개발을 할 때 이제는 너무나도 많이 쓰는 Butterknife 를 좀 더 멋지게 사용할 수 있는 방법에 대해 포스팅 해보겠습니다.




준비. app 단계의 build.gradle 설정

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

최신 버전 및 사용법은 버터나이프 깃허브에서 확인해 주세요.




일반적인 설정 방법


Activity

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);

}


Fragment

private Unbinder unbinder;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
unbinder = ButterKnife.bind(this, view);

return view;
}

@Override
public void onDestroyView() {
super.onDestroyView();
if(unbinder != null) unbinder.unbind();
}

위가 같이 설정하면 매 Activity 와 매 Fragment 마다 같은 코드를 반복해 줘야 하는 불편함이 있습니다.

이에 BaseAcitivty 와 BaseFragment 를 만들어 코드 중복을 피해보겠습니다.



추상화 작업


BaseActivity

public abstract class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(getLayoutId());
ButterKnife.bind(this);
}

@LayoutRes
public abstract int getLayoutId();

}


BaseFragment

public abstract class BaseFragment extends Fragment {

private Unbinder unbinder;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(getLayoutId(), container, false);
unbinder = ButterKnife.bind(this, view);

return view;
}

@LayoutRes
public abstract int getLayoutId();

@Override
public void onDestroyView() {
super.onDestroyView();
if(unbinder != null) unbinder.unbind();
}

}



사용법


Activity

public class MainActivity extends BaseActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

@Override
public int getLayoutId() {
return R.layout.activity_main;
}

}

BaseActivity 를 상속한 후 getLayoutId 값만 설정해 주면 모든 설정이 완료됩니다.


Fragment

public class A_Fragment extends BaseFragment {

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}

@Override
public int getLayoutId() {
return R.layout.fragment_a;
}

}

BaseFragment 를 상속한 후 getLayoutId 값만 설정해 주면 모든 설정이 완료됩니다.



<참고자료>

버터나이프를 사용한 효율적인 추상화

반응형
Comments