본문 바로가기
개발/안드로이드

버터나이프 추상화

by darksilber 2019. 5. 24.
반응형

출처 - https://black-jin0427.tistory.com/119

 

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

 

안드로이드 개발을 할 때 이제는 너무나도 많이 쓰는 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 값만 설정해 주면 모든 설정이 완료됩니다.

 

 

<참고자료>

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

반응형

댓글