MVP从MVC演变而来,二者有什么区别呢?点击打开链接百科上说的很清楚。下面是比较熟悉的关系图:
下面是一个简单的demo,分包如下:
由于Model与View完全解耦,通过在Presenter中把Model中获取的数据交付给View。
bean:
/**
* People 实体模型
*/
public class People {
private String name;
private String idNumber;
private String address;
public String getName() {
return name;
}
public String getIdNumber() {
return idNumber;
}
public String getAddress() {
return address;
}
public void setName(String name) {
this.name = name;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public void setAddress(String address) {
this.address = address;
}
}
model:
/**
* 在bean中存取数据
*/
public class peopleModel{
private People people = new People();
private static peopleModel model;
private String value;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
value = (String)msg.obj;
break;
default:
break;
}
}
};
public String getidNumber(){
return people.getIdNumber();
}
public String getName(){
return people.getName();
}
public String getAddress(){
return people.getAddress();
}
public void setidNumber(String id){
people.setIdNumber(id);
}
public void setName(String name){
people.setName(name);
}
public void setAddress(String address){
people.setAddress(address);
}
public static peopleModel newInstance(){
if(model==null){
model = new peopleModel();
}
return model;
}
}
presenter:
public class peoplePresenter {
viewInterface viewinter;
peopleModel mode = peopleModel.newInstance();
public peoplePresenter(viewInterface viewinter){
this.viewinter = viewinter;
}
public void setValue(String id,String name,String address){
mode.setidNumber(id);
mode.setName(name);
mode.setAddress(address);
}
public void updateValue(){
viewinter.setName("diy");
viewinter.setidNumber("111");
viewinter.setAddress("anhui");
}
public void showAlertDialog(){
viewinter.showAlert(mode.getidNumber()+" "+mode.getName()+" "+mode.getAddress());
}
}
view interface:
public interface viewInterface {
public void setName(String name);
public void setidNumber(String idNumber);
public void setAddress(String password);
public String getName();
public String getAddress();
public String getidNumber();
public void showAlert(String value);
public void showText(String s);
}
Activity:
public class MainActivity extends AppCompatActivity implements viewInterface, View.OnClickListener{
private Button button;
private EditText id;
private EditText name;
private EditText address;
private TextView text;
private peoplePresenter presenter;
private downPresenter downpresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
id = (EditText)findViewById(R.id.idnumber);
name = (EditText)findViewById(R.id.name);
address = (EditText)findViewById(R.id.address);
text = (TextView)findViewById(R.id.text);
presenter = new peoplePresenter(MainActivity.this);
downpresenter = new downPresenter(MainActivity.this);
button.setOnClickListener(this);
}
@Override
public void setName(String name) {
this.name.setText(name);
}
@Override
public void setidNumber(String idNumber) {
this.id.setText(idNumber);
}
@Override
public void setAddress(String address) {
this.address.setText(address);
}
@Override
public String getName() {
return this.name.getText().toString();
}
@Override
public String getAddress() {
return this.address.getText().toString();
}
@Override
public String getidNumber() {
return this.id.getText().toString();
}
/**
* @param s
* @显示网络数据
*/
@Override
public void showText(String s) {
this.text.setText(s);
}
/**
* @param value
* @显示AlterDialog
*/
@Override
public void showAlert(String value) {
Dialog dialog = new AlertDialog.Builder(this).setMessage("确认输入的信息:"+value).setNeutralButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setNegativeButton("正确", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
dialog.show();
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id){
case R.id.button:
presenter.setValue(getidNumber(),getName(),getAddress());
downpresenter.showText();
presenter.showAlertDialog();
break;
default:
break;
}
}
}
详细见下载资源:
http://download.csdn.net/detail/bat_os/9736423