在Android开发中,最头痛的事情莫过于改变了model之后,还需要通过写代码来改变View的内容。
基于以上问题,本人写了一个简单的demo用于实现自动化改变view内容。即在任何时候任何地方只要model改变,view会自动根据model的值更新内容。
demo开发步骤如下:
1、定义model
public class Model {
private String name;
private int age;
private boolean sexMan;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSexMan() {
return sexMan;
}
public void setSexMan(boolean sexMan) {
this.sexMan = sexMan;
}
}
这是一个普通的bean类。
2、为了实现由model变动能及时刷新view的内容,我们需要定义一个interface接口,命名为InterfaceForModel。在该接口中需要定义与model中属性数目相同个数的抽象方法,每个方法传入的参数与model中该属性的set方法参数保持一致。
public interface InterfaceForModel {
void onNameChanged(String name);
void onAgeChanged(int age);
void onSexChanged(boolean sex);
}
3、接下来就是在model中定义上面接口的实例,并定义set方法供外部调用,同时在model中的每个属性变量的set方法中添加对接口实例中对应方法的调用即可。如下面红色部分的代码:
public class Model {
private String name;
private int age;
private boolean sexMan;
private InterfaceForModel interfaceForModel;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
if (interfaceForModel != null) {
interfaceForModel.onNameChanged(name);
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
if (interfaceForModel != null) {
interfaceForModel.onAgeChanged(age);
}
}
public boolean isSexMan() {
return sexMan;
}
public void setSexMan(boolean sexMan) {
this.sexMan = sexMan;
if (interfaceForModel != null) {
interfaceForModel.onSexChanged(sexMan);
}
}
public void setInterfaceForModel(InterfaceForModel interfaceForModel) {
this.interfaceForModel = interfaceForModel;
}
}
然后神奇的效果就出来了,在任何地方改变model的值,view的内容也会跟着变。
model.setInterfaceForModel(new InterfaceForModel() {
@Override
public void onNameChanged(String name) {
mTvName.setText("姓名:" + name);
}
@Override
public void onAgeChanged(int age) {
mTvAge.setText("年龄:" + age);
}
@Override
public void onSexChanged(boolean sex) {
mTvSex.setText(sex ? "男" : "女");
}
});
Demo链接:http://download.csdn.net/detail/wanggsx20080817/9741284