基于MVP封装的框架 轻量好用
public interface ILoginView extends IBaseView {
// TODO: todo something
}
public class LoginPresenter extends BasePresenter<ILoginView> {
// TODO: todo something
}
public class LoginActivity extends MVPBaseActivity<ILoginView, LoginPresenter> implements ILoginView {
private boolean isFromLogout;
@Override
protected int getContentViewId() {
return R.layout.activity_main;
}
@Override
protected void initTitle() {
ImmerseStatusBar.setImmerseStatusBar(this);
setMiddleTitle("登录");
}
@Override
protected void initData() {
getExtraData();
}
private void getExtraData() {
if (getIntent() != null) {
isFromLogout = getIntent().getBooleanExtra(ISFROMLOGOUT, false);
}
}
@Override
protected LoginPresenter createPresenter() {
return new LoginPresenter();
}
@Override
public MultiStateView getMultiStateView() {
return null;
}
@Override
public void getNetData() {
}
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
}
public class DemoFragment extends MVPBaseFragment<IDemoView, DemoPresenter> implements IDemoView {
@Override
protected DemoPresenter createPresenter() {
return null;
}
@Override
protected View getRootView(LayoutInflater inflater) {
return null;
}
@Override
protected void initData() {
}
@Override
public MultiStateView getMultiStateView() {
return null;
}
@Override
public void getNetData() {
}
@Override
public void onSuccess() {
}
@Override
public void onError() {
}
}
Jumper JUMPER = Reflection.newProxy(Jumper.class, new JumperInvokeHandler(BaseProjectApplication.getInstance()));
public interface Jumper extends IntentNames {
@ActivityInfo(clz = LoginActivity.class)
MyIntentHandler gotoLogin(@Extra(RADIO_INDEX) int id, @Extra(ISFROMLOGOUT) boolean isfromlogout);
}
JUMPER.gotoLogin(1, true).startActivity(mContext);
JUMPER.gotoLogin(1, true).startActivityForResult(this, LOGIN_REQUEST);
- 参照上述Activity的写法, 在Activity或者Fragment中可以直接拿到对应的Presenter的引用: mPresenter
- 将必要参数传递给Presenter, 直接调用Presenter中的方法, 对应Presenter中需要重写该方法拿到相应参数:
setExtralData(Object... objects);
- 参照上述Presenter的写法, 在Presenter中可以通过getView()的方法拿到对应View的弱引用, 当View销毁的时候, getView()拿到的也随之成为空对象, 因此如果自行封装网络请求的话需要在Activity或者Fragment的onDestory()生命周期方法中终止请求或者在请求完成的会调用进行判空处理, 避免出现空指针的现象
- 如果涉及到点击Button请求网络等类似需求时需要显示loading框进行过度, 可以直接调用IBaseView中的
setWaitingDialogStatus(boolean isShow);
目前正在优化, 可参照项目中NetApi进行自行封装
目前正在进行中