p层利用率更高的mvp架构(网络框架使用retrofit,依赖注入使用dagger 2,还集成了rxjava)
1.首先在要使用此架构的工程模块中添加项目依赖 compile project(':lartemis-api')
在你的项目模块中创建自定义application然后在oncreate中初始化框架
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LArtemis.getInstance().init(this);//此处
初始化框架}
}
此处继承application如果有需要可以换成自己的application
然后在AndroidManifest.xml中加入
<application
...
android:name=".MainApplication"
...
>
...
</application>
public interface SecondUiCallbacks{//给UI界面调用
void getWeatherInfo();
}
public interface SecondUi extends BaseController.Ui<SecondController.SecondUiCallbacks> {
//这里面的方式是给UI界面调用的,要activity等UI层实现
void showToast();
}
如果同个模块但是不同的调用接口则可以在SecondUiCallbacks进行添加方法,例如:
void getWeatherInfo();
void getWeatherInfo1();
}
//然后在此Controller中实现
@Override
protected SecondUiCallbacks createUiCallbacks(SecondUi ui) {
return new SecondUiCallbacks() {
@Override
public void getWeatherInfo() {
}
@Override
public void getWeatherInfo1() {
}
};
}
//如果回调的界面不同但是又属于当前模块则可以在此Controller中添加
public interface thirdUi extends SecondUi{
void showToast1();
}
@Inject
public void SecondController(ApiService apiService){
mApiService = Preconditions.checkNotNull(apiService, "ApiService cannot be null");
}
同时如果有必要则重写生命周期OnInited(),populateUi()方法相当于OnResume()但是OnInited在populateUi之前执行,onSuspended相当于onResume ,例如 EventUtil.register(this);在OnInited()中执行,EventUtil.unregister(this);放在onSuspended()中执行,进来就加载网络数据放在populateUi()
@Override
protected void onInited() {
super.onInited();
}
@Override
protected void onSuspended() {
super.onSuspended();
}
@Override
protected synchronized void populateUi(SecondUi ui) {
super.populateUi(ui);
}
@Inject
public MainController(ApiService apiService,SecondController secondController){
super();
mApiService = Preconditions.checkNotNull(apiService, "ApiService cannot be null");
mSecondController = Preconditions.checkNotNull(secondController, "secondController cannot be null");
}
@Override
protected void onInited() {
super.onInited();
//其他controller则在这里init
mSecondController.init();
}
@Override
protected void onSuspended() {
super.onSuspended();
//其他controller则在这里suspend
mSecondController.suspend();
}
//然后添加getter方法
public SecondController getSecondController() {
return mSecondController;
}
新建一个activity需要在类上面注解写入layout布局,且实现一个UI接口
@ContentView(R.layout.activity_main)
public class MainActivity extends CoreActivity<MainController.MainUiCallbacks> implements MainController.MainUi {
}
新建一个fragment跟activity类似
@ContentView(R.layout.activity_main)
public class MainFragment extends BaseFragment<MainController.MainUiCallbacks> implements MainController.MainUi{
}
如果有参数则在如下方法中获取
@Override
protected void handleArguments(Bundle arguments) {
}
获取UI中控件则
@Override
protected void initViews(Bundle savedInstanceState) {
}
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getCallbacks().getWeatherInfo();
}
});
fragment和activity中调用是类似的
如果Controller是对应多个UI界面则需要判断
@Override
protected MainUiCallbacks createUiCallbacks(final MainUi ui) {
return new MainUiCallbacks() {
@Override
public void getWeatherInfo() {
if (ui instanceof MainUi){
}
mApiService.getWeatherResult(IP)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new RequestCallBack<HttpResult<Weather>>() {
@Override
public void onResponse(HttpResult<Weather> response) {
ui.showToast();
}
@Override
public void onFailure(ResponseError error) {
ui.onResponseError(error);
}
});
}
};
}