学习自MVP架构
MVP的全称为Model-View-Presenter,即模型-视图-协调器(主持者)
- Model:处理数据和业务逻辑等,如:数据库的操作,数据的请求加载,数据运算,JavaBean;
- View:显示界面,展示结果等,一切与界面相关的,如:XML文件,Activity,Fragment,Dialog;
- Presenter:协调Model和View模块工作,处理交互
#程序示例
在ListView上展示文字和图片
- 主界面的布局:一个ListView,
- 定义一个Girl 的Bean对象
- 定义一个普通的适配器GirlAdapter,
- 自定义ListView中的Item的一个布局文件
##Model层
首先定义接口
public interface IGirlModel {
void loadGirl(onGirlListener listener);//加载数据
interface onGirlListener{//数据加载完成后的监听回调
void onComplete(List<Girl> list);
}
}
然后实现该接口
public class GirlModelImpl implements IGirlModel {
@Override
public void loadGirl(onGirlListener listener) {
//加载数据
List<Girl> list=new ArrayList<Girl>();
list.add(new Girl(R.drawable.image1, "你是我的小苹果image1"));
list.add(new Girl(R.drawable.image2, "你是我的小苹果image2"));
list.add(new Girl(R.drawable.image3, "你是我的小苹果image3"));
list.add(new Girl(R.drawable.image4, "你是我的小苹果image4"));
list.add(new Girl(R.drawable.image5, "你是我的小苹果image5"));
list.add(new Girl(R.drawable.image6, "你是我的小苹果image6"));
list.add(new Girl(R.drawable.image7, "你是我的小苹果image7"));
list.add(new Girl(R.drawable.image8, "你是我的小苹果image8"));
//返回数据
listener.onComplete(list);
}
}
##View层
定义接口
/**
* 视图层接口,定义与视图操作相关的接口
*/
public interface IGirlView {
//加载的提示
void showDialog();
//显示加载后的数据
void showGirls(List<Girl>list);
}
实现接口
public class MainActivity extends Activity implements IGirlView {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
listView = (ListView) findViewById(R.id.listview);
}
@Override
public void showDialog() {
Toast.makeText(this, "正在加载数据中。。。", Toast.LENGTH_LONG).show();
}
@Override
public void showGirls(List<Girl> list) {
listView.setAdapter(new GirlAdapter(this, list));
}
}
##Persenter层
用于数据与视图的交互
public class GirlPresenter {
// View 的引用
IGirlView iGirlView;
// Model的引用
IGirlModel iGirlModel=new GirlModelImpl();
public GirlPresenter(IGirlView iGirlView) {
this.iGirlView = iGirlView;
}
public void feach() {
if (iGirlModel != null && iGirlView != null) {
// 显示进度条
iGirlView.showDialog();
// 加载数据
iGirlModel.loadGirl(new onGirlListener() {
@Override
public void onComplete(List<Girl> list) {
// 返回数据,显示到View层
iGirlView.showGirls(list);
}
});
}
}
}