회사에서도 만들고 있지만, 다른 개발자와의 협업을 위해 중간중간 로직에 대해 논의하고 코드를 짜고 있음 (다같이 이해하기 쉬운쪽으로 배려해줘야 하니까)
현재 이 코드는 회사에서 사용 안하고 있지만 좀 더 내 취향에 맞는 Dagger2와 MVP사용 방식이라 올려둠
(github에 회사말고 새로운 내 프로젝트를 만들려고 했는데, 지금 좀 바쁜시기라 나중에 하기로...)
먼저 BaseActivity
- activity_base xml은 툴바만 있는 레이아웃
- 툴바가 있는 화면과 없는 화면을 구분하기 위해 setToolbarHidden을 만듬(아니면 그냥 Toolbar 없는 클래스를 하나 더 만들어도 될 듯)
@EActivity(R.layout.activity_base)
public abstract class BaseActivity<T extends BasePresenter> extends AppCompatActivity implements BaseView {
@Inject
protected T presenter;
@ViewById
protected Toolbar toolbar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSupportActionBar(toolbar);
}
protected ActivityComponent getActivityComponent() {
return DaggerActivityComponent.builder()
.appComponent(((BPApplication) getApplicationContext()).getAppComponent())
.activityModule(new ActivityModule(this))
.build();
}
public void setToolbarHidden(boolean hidden, FrameLayout container) {
if (hidden) {
toolbar.setVisibility(View.INVISIBLE);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) container.getLayoutParams();
params.setMargins(0, 0, 0, 0);
container.setLayoutParams(params);
} else {
toolbar.setVisibility(View.VISIBLE);
runOnUiThread(() -> {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) container.getLayoutParams();
params.setMargins(0, toolbar.getHeight(), 0, 0);
container.setLayoutParams(params);
});
}
}
}
BaseFragment
- BackKey처리와 presenter injection처리 완료
public abstract class BaseFragment<T extends BasePresenter> extends Fragment implements View.OnKeyListener, BaseView {
@Inject
protected T presenter;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(this);
}
protected FragmentComponent getFragmentComponent(){
return DaggerFragmentComponent.builder()
.appComponent(((BPApplication)getActivity().getApplicationContext()).getAppComponent())
.fragmentModule(new FragmentModule(this))
.build();
}
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP){
onBackButtonPressed();
return true;
}
return false;
}
public abstract boolean onBackButtonPressed();
}
BasePresenter
- Contract에 있는 Presenter인터페이스에서 상속받아야 할 BasePresenter
- Presenter class에서 변수에 XXXContract.View view선언 후 사용할 것
public interface BasePresenter<T extends BaseView> {
void attachView(T view);
void detachView();
}
BaseView
- Contract에 있는 View인터페이스에서 상속받아야 할 BaseView
- 현재 아무것도 없지만 Toast나 기본으로 들어가야 할 view를 넣어주면 좋을 듯
public interface BaseView {
}
ActivityComponent
- Injection할 activity들은 여기에 다 inject할 것
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
Activity getActivity();
// void inject(ContractActivity activity);
}
FragmentComponent
- Injection할 Fragment들은 여기에 다 inject할 것
@FragmentScope
@Component(dependencies = AppComponent.class, modules = FragmentModule.class)
public interface FragmentComponent {
}
ActivityModule
@Module
public class ActivityModule {
Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides
@ActivityScope
Activity providesActivity(){
return activity;
}
}
FragmentModule
@Module
public class FragmentModule {
Fragment fragment;
public FragmentModule(Fragment fragment) {
this.fragment = fragment;
}
@Provides
@FragmentScope
Fragment providesFragment(){
return fragment;
}
}
'Programming > Android' 카테고리의 다른 글
Glide Svg 이미지관련 (0) | 2017.05.19 |
---|---|
RealmList와 Realm + Rx2 사용 이슈 (0) | 2017.05.19 |
Permission check관련 (0) | 2017.03.09 |
Android Studio java1.8관련 에러 (0) | 2017.02.25 |
Dagger2 및 Annotation 사용중 관련에러 (0) | 2017.02.18 |