安卓開發之架構理解(MVP)
阿新 • • 發佈:2019-01-11
學習自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);
}
});
}
}
}