說到Android設計模式的MVC模式,估計不少人都是比較熟悉了,這裏深刻了解一下MVC究竟是怎麼回事,以ListView爲例子講解。html
1、深刻理解MVC概念java
MVC即Model-View-Controller。M:邏輯模型,V:視圖模型,C:控制器。android
MVC模式下,系統框架的類庫被劃分爲3種:模型(Model)、視圖(View)、控制器(Controller)。模型對象負責創建數據結構和相應的行爲操做處理。視圖對象負責在屏幕上渲染出相應的圖形信息展現給用戶看。控制器對象負責截獲用戶的按鍵和屏幕觸摸等事件,協調Model對象和View對象。
數據庫
用戶與視圖交互,視圖接收並反饋用戶的動做;視圖把用戶的請求傳給相應的控制器,由控制器決定調用哪一個模型,而後由模型調用相應的業務邏輯對用戶請求進行加工處理,若是須要返回數據,模型會把相應的數據返回給控制器,由控制器調用相應的視圖,最終由視圖格式化和渲染返回的數據,對於返回的數據徹底能夠增長用戶體驗效果展示給用戶。設計模式
一個模型能夠有多個視圖,一個視圖能夠有多個控制器,一個控制器也能夠有多個模型。數組
(1)、模型(Model)數據結構
Model是一個應用系統的核心部分,表明了該系統實際要實現的全部功能處理。好比:在視頻播放器中,模型表明一個視頻數據庫及播放視頻的程序函數代碼;在拍照應用中,模型表明一個照片數據庫,及看圖片時的程序函數代碼。在一個電話應用中,Model表明一個電話號碼簿,以及撥打電話和發送短信的程序函數代碼。框架
Model在values目錄下經過xml文件格式生成,也能夠經過硬編碼的方式直接Java代碼生成。View和Model是經過橋樑Adapter來鏈接起來。ide
(2)、視圖(View)函數
View是軟件應用傳送給用戶的一個反饋結果。它表明軟件應用中的圖形展現、聲音播放、觸覺反饋等職責。視圖的根節點是應用程序的自身窗口。好比,視頻播放器中可能包含當前播放的畫面,這個畫面就是一個視圖。另外一個視圖組件多是該視頻的文字標題。再一個就是一些播放按鍵,好比:Stop、Start、Pause等按鈕。
View在layout目錄下經過xml文件格式生成,用findViewById()獲取;也能夠經過硬編碼的方式直接Java代碼生成。
(3)、控制器(Controller)
Controller在軟件應用負責對外部事件的響應,包括:鍵盤敲擊、屏幕觸摸、電話呼入等。Controller實現了一個事件隊列,每個外部事件均在事件隊列中被惟一標識。框架依次將事件從隊列中移出並派發出去。
2、MVC典型例子的實現ListView
Android中最典型MVC是ListView,要顯示的數據是Model,界面中的ListView是View,控制數據怎樣在ListView中顯示是Controller。
(1)、經過硬編碼的方式直接Java代碼生成方式,這裏直接在註釋講解
public class ArrayAdapterActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //界面中的ListView是View,這裏經過硬編碼的方式直接Java代碼生成 ListView listView = new ListView(this); // 控制數據怎樣在ListView中顯示是Controller ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData()); //View和Model是經過橋樑Adapter來鏈接起來。 listView.setAdapter(adapter); setContentView(listView); // 點擊事件,Controller負責 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // position是從0開始的,獲取點擊item的內容 Toast.makeText(ArrayAdapterActivity.this, getData().get(position), Toast.LENGTH_SHORT).show(); } }); } // 要顯示的數據Model,經過硬編碼的方式直接Java代碼生成 private List<String> getData() { List<String> data = new ArrayList<String>(); data.add("a"); data.add("b"); data.add("c"); data.add("d"); return data; } }
(2)、視圖View和模型Model取資源文件方式
先在res/layout文件夾下建立文件activity_arrayadapter.xml,能夠看出只包含一個ListView,即視圖View
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" /> </LinearLayout>
在res/values文件夾下的strings.xml添加一個字符數組,及模型Model
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="good"> <item>a</item> <item>b</item> <item>c</item> <item>d</item> </string-array> </resources>
Activity代碼,在註釋中講解MVC模型使用
public class ArrayAdapterActivity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_arrayadapter); //界面中的ListView是View,View在layout目錄下經過xml文件格式生成,用findViewById()獲取 ListView listView = (ListView) findViewById(R.id.listview); // 控制數據怎樣在ListView中顯示是Controller ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData()); //View和Model是經過橋樑Adapter來鏈接起來。 listView.setAdapter(adapter); // 點擊事件,Controller負責 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // position是從0開始的,獲取點擊item的內容 Toast.makeText(ArrayAdapterActivity2.this, getData().get(position), Toast.LENGTH_SHORT).show(); } }); } // 要顯示的數據Model,Model在values目錄下經過xml文件格式生成 private List<String> getData() { List<String> data = new ArrayList<String>(); Resources res =getResources(); // 取xml文件格式的字符數組 String[] good=res.getStringArray(R.array.good); for(int i=0;i<good.length;i++){ data.add(good[i]); } return data; } }
Android的MVC模式要在項目中慢慢理解,這樣才能理解透徹並活學活用。
到這裏基本介紹完了Android設計模式之MVC模型,若本文對您有幫助請點「推薦」支持,如有什麼錯誤請指正留言,共同探討。