(题外话:前两篇作为前提)
一:Activity的Base基类
public abstract class BaseActivity<T extends BasePresenter> extends AppCompatActivity { private Unbinder mUnbinder; private MyApplication mApplication; @Inject T mPresenter ; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate())); super.onCreate(savedInstanceState); setContentView(setLayout()); mUnbinder = ButterKnife.bind(this); this.mApplication = (MyApplication) getApplication(); setupActivityComponent(mApplication.getAppComponent()); init(); } @Override protected void onDestroy() { super.onDestroy(); if(mUnbinder !=Unbinder.EMPTY){ mUnbinder.unbind(); } } public abstract int setLayout(); public abstract void setupActivityComponent(AppComponent appComponent); public abstract void init(); }
二:Fragment的Base基类
public abstract class BaseFragment<T extends BasePresenter> extends Fragment { private Unbinder mUnbinder; private MyApplication mApplication; private View mRootView; @Inject T mPresenter ; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayout(), container, false); mUnbinder= ButterKnife.bind(this, mRootView); return mRootView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); this.mApplication = (MyApplication) getActivity().getApplication(); setupActivityComponent(mApplication.getAppComponent()); init(); } @Override public void onDestroy() { super.onDestroy(); if(mUnbinder != Unbinder.EMPTY){ mUnbinder.unbind(); } } public abstract int setLayout(); public abstract void setupActivityComponent(AppComponent appComponent); public abstract void init(); }
三:实现Base基类的子类样式
public class RecommendActivity extends BaseActivity<RecommendPresenter> implements RecommendContract.View { @Override public void showLoading() { Toast.makeText(this,"showLoading",Toast.LENGTH_SHORT).show(); } @Override public void showError(String msg) { Toast.makeText(this,"showError",Toast.LENGTH_SHORT).show(); } @Override public void dismissLoading() { Toast.makeText(this,"dismissLoading",Toast.LENGTH_SHORT).show(); } @Override public void showResult(List<AppInfo> datas) { Toast.makeText(this,datas.get(0).getDisplayName().toString(),Toast.LENGTH_SHORT).show(); } @Override public void showNodata() { Toast.makeText(this,"showNodata",Toast.LENGTH_SHORT).show(); } @Override public int setLayout() { return R.layout.fragment_recomend; } @Override public void setupActivityComponent(AppComponent appComponent) { DaggerRecommendComponent.builder() .appComponent(appComponent) .recommendModule(new RecommendModule(this)) .build() .inject(this); } @Override public void init() { mPresenter.requestDatas(); Toast.makeText(this,"init",Toast.LENGTH_SHORT).show(); } }
public class RecommendFragment extends BaseFragment<RecommendPresenter> implements RecommendContract.View { @Override public int setLayout() { return R.layout.fragment_recomend; } @Override public void setupActivityComponent(AppComponent appComponent) { } @Override public void init() { mPresenter.requestDatas(); } @Override public void showResult(List<AppInfo> datas) { Toast.makeText(getActivity(),datas.get(0).getDisplayName().toString(),Toast.LENGTH_SHORT).show(); } @Override public void showNodata() { Toast.makeText(getActivity(),"暂时无数据,请吃完饭再来",Toast.LENGTH_LONG).show(); } @Override public void showLoading() { } @Override public void showError(String msg) { Toast.makeText(getActivity(),"服务器开小差了:"+msg,Toast.LENGTH_LONG).show(); } @Override public void dismissLoading() { } }