使用简单登陆功能进行说明:
MVP:model、view、presenter
1.目录结构
2.MainActivity.java, 重写接口中的方法,与Presenter连接,通过Presenter展示页面数据
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.alva.mvptest.R;
import com.example.alva.mvptest.presenter.ILoginPresenter;
import com.example.alva.mvptest.presenter.ILoginPresenterImpl;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivityextends AppCompatActivityimplements ILoginView, View.OnClickListener{
@BindView(R.id.ed_username)
EditTexted_username;
@BindView(R.id.ed_password)
EditText ed_password;
@BindView(R.id.bt_login)
Button bt_login;
@BindView(R.id.bt_clear)
Button bt_clear;
@BindView(R.id.pb_login)
ProgressBar pb_login;
ILoginPresenter iLoginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
bt_clear.setOnClickListener(this);
bt_login.setOnClickListener(this);
iLoginPresenter =new ILoginPresenterImpl(this);//创建Presenter实例
iLoginPresenter.setProgressBarVisiblity(View.INVISIBLE);
}
public void onClick(View view){
switch (view.getId()){
case R.id.bt_login:
iLoginPresenter.setProgressBarVisiblity(View.VISIBLE);
bt_login.setEnabled(false);
bt_clear.setEnabled(false);
iLoginPresenter.doLogin(ed_username.getText().toString(),ed_password.getText().toString());
break;
case R.id.bt_clear:
iLoginPresenter.clear();
break;
}
}
@Override
public void onClearText() {
ed_password.setText("");
ed_username.setText("");
}
@Override
public void onLoginResult(Boolean result, int code) {
iLoginPresenter.setProgressBarVisiblity(View.INVISIBLE);
bt_login.setEnabled(true);
bt_clear.setEnabled(true);
if(result){
Log.i("login", "onLoginResult: success****");
Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
}else{
Log.i("login", "onLoginResult: fail****");
Toast.makeText(MainActivity.this,"登陆失败,code="+code,Toast.LENGTH_SHORT).show();
}
}
@Override
public void onSetProgressBarVisibility(int visibility) {
pb_login.setVisibility(visibility);
}
}
3.Presenter层,调用View接口中的方法(接口中的方法已经被MainActivity重写)并且与Model层相连接
P层调用Model中的方法,通过接口接收M层传来的数据,并通过View将数据返回到View层
可以看到在实现类中,重写的方法都是调用View层接口中的方法(PS:在View层中调用Presenter层的方法,Presenter层重写的方法调用的是在MainActivity.java重写的方法)
之后,创建了Model实例,调用了Model层的方法checkUserValidity(username,password)
4.Model层
若需要将Model中获取的数据返回到P层,则需要通过Model的监听接口返回到Presenter层
参照:
http://blog.csdn.net/limonzet/article/details/53328315
http://blog.csdn.net/lmj623565791/article/details/46596109