public abstract class BaseActivity extends Activity implements LoginView {
private boolean isshowtitle = true;
private boolean isshowstate = true;
private static Toast toast;
protected ProgressDialog progressDialog;
protected final String TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!isshowtitle){
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
if(isshowstate){
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
}
progressDialog = new ProgressDialog(this);
setContentView(intiLayout());
initView();
initData();
}
public abstract int intiLayout();
public abstract void initView();
public abstract void initData();
public void setTitle(boolean ishow) {
isshowtitle=ishow;
}
public void setState(boolean ishow) {
isshowstate=ishow;
}
@Override
public void showLoading(String msg) {
progressDialog.setMessage(msg);
if (!progressDialog.isShowing()) {
progressDialog.show();
}
}
@Override
public void hideLoading() {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
@Override
public void showError(String errorMsg) {
Toast.makeText(this, errorMsg, Toast.LENGTH_SHORT).show();
}
public void toastLong(String msg){
if (null == toast) {
toast = new Toast(this);
toast.setDuration(Toast.LENGTH_LONG);
toast.setText(msg);
toast.show();
} else {
toast.setText(msg);
toast.show();
}
}
public void toastShort(String msg){
if (null == toast) {
toast = new Toast(this);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setText(msg);
toast.show();
} else {
toast.setText(msg);
toast.show();
}
}
}
public class LoginActivity extends BaseActivity implements ILoginView, View.OnClickListener{
private EditText edPhone;
private EditText edPassword;
private Button btnLogin;
private LoginPresenter presenter;
@Override
public int intiLayout() {
setTitle(false);
setState(false);
return R.layout.activity_main;
}
@Override
public void initView() {
edPhone = (EditText) findViewById(R.id.ed_phone);
edPassword = (EditText) findViewById(R.id.ed_password);
btnLogin = (Button) findViewById(R.id.btn_login);
btnLogin.setOnClickListener(this);
}
@Override
public void initData() {
presenter = new LoginPresenter(new UserModel());
presenter.attachView(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_login:
presenter.login();
break;
}
}
@Override
public String getUsername() {
return edPhone.getText().toString().trim();
}
@Override
public String getPassword() {
return edPassword.getText().toString().trim();
}
@Override
public void showResult(String result) {
Toast.makeText(LoginActivity.this, result, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
presenter.detachView();
super.onDestroy();
}
}
public interface ILoginView extends LoginView {
String getUsername();
String getPassword();
void showResult(String result);
}
public class LoginPresenter extends BasePresenter<ILoginView> implements ILoginPresenter {
private IUserModel userModel;
public LoginPresenter(IUserModel userModel) {
this.userModel = userModel;
}
@Override
public void login() {
checkViewAttached();
getMvpView().showLoading("登錄中...");
userModel.login(getMvpView().getUsername(), getMvpView().getPassword(), new Callback() {
@Override
public void onSuccess() {
if (isViewAttached()) {
getMvpView().hideLoading();
getMvpView().showResult("登錄成功");
}
}
@Override
public void onFailure(String errorMsg) {
if (isViewAttached()) {
getMvpView().hideLoading();
getMvpView().showResult(errorMsg);
}
}
});
}
}
public class UserModel implements IUserModel{
Handler handler = new Handler();
@Override
public void login(final String username, final String password, final Callback callback) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
if ("cqlsir".equals(username) && "123456".equals(password)) {
callback.onSuccess();
} else {
callback.onFailure("用戶名或密碼錯誤");
}
}
}, 2000);
}
}
public interface IUserModel {
void login(String username, String password, Callback callback);
}
public class BasePresenter<V extends LoginView> implements Presenter<V> {
private V mvpView;
@Override
public void attachView(V mvpView) {
this.mvpView = mvpView;
}
@Override
public void detachView() {
this.mvpView = null;
}
public boolean isViewAttached() {
return mvpView != null;
}
public V getMvpView() {
return mvpView;
}
public void checkViewAttached() {
if (!isViewAttached()) {
throw new MvpViewNotAttachedException();
}
}
public static class MvpViewNotAttachedException extends RuntimeException {
public MvpViewNotAttachedException() {
super("請求數據前請先調用 attachView(MvpView) 方法與View建立連接");
}
}
}
public interface ILoginView extends LoginView {
String getUsername();
String getPassword();
void showResult(String result);
}
public interface LoginView {
void showLoading(String msg);
void hideLoading();
void showError(String errorMsg);
}
public interface ILoginPresenter {
void login();
}
public interface Callback {
void onSuccess();
void onFailure(String errorMsg);
}