출처 - 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 값만 설정해 주면 모든 설정이 완료됩니다.
<참고자료>
'개발 > 안드로이드' 카테고리의 다른 글
Android Architecture Components - Room (0) | 2019.05.28 |
---|---|
ROOM 라이브러리 사용하기 , 코루틴 (0) | 2019.05.27 |
Stetho로 DB/SharedPreference값,네트워크상태등 앱 디버깅 하기 (0) | 2019.05.23 |
데이터바인딩(DataBinding) (0) | 2019.05.23 |
ScrollView 안에 ImageView를 넣으면 위아래 여백이 생기는 경우 (0) | 2019.05.21 |
댓글