在上一節一塊兒瞭解了ListView的簡單使用,那麼本節繼續來學習與ListView有着千絲萬縷的Adapter。前端
在開始學習Adapter以前咱們要來了解下這個MVC模式。提及MVC模式,估計不少同窗已經或多或少據說過,可能在前面的Java開發中也有所接觸。java
MVC全名是Model View Controller,是模型(model)、視圖(view)、控制器(controller)的縮寫。一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。android
MVC各組件之間的關係以下圖所示,能夠清楚的知道各層之間的聯繫。數據庫
在Android開發中,比較流行的開發框架模式採用的是MVC框架模式,採用MVC模式的好處是便於UI界面部分的顯示和業務邏輯,數據處理分開。那麼Android項目中哪些代碼來充當M、V、C角色呢?c#
Android 鼓勵弱耦合和組件的重用,Android 中MVC的具體體現以下:後端
模型(model):是應用程序的主題部分,全部的業務邏輯都應在該層(對數據庫的操做、對網絡等的操做都應該在model裏面處理,固然對計算等操做也是必須放在該層的)。設計模式
視圖層(view):是應用程序中負責生成用戶界面的部分。也是整個MVC架構中用戶惟一能夠看到的一層,接收用戶的輸入,顯示用戶的處理結果。通常用XML文件進行界面的描述,使用的時候能夠很是方便的引入。數組
控制層(controller):是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分。Android的控制層的重任一般落在了衆多Activity的肩上,這句話也就暗含了不要在Activity中寫過多代碼,要經過Activity交給model業務邏輯處理層處理,這樣作的另一個緣由是Android中的Activity的響應時間是5秒,若是耗時的操做放在這裏,程序很容易無響應。微信
在MVC模式中其實控制器Activity主要是起到解耦做用,將View視圖和Model模型分離,雖然Activity起到交互做用,可是通常在Activity中有不少關於視圖UI的顯示代碼,所以View視圖和Activity控制器並非徹底分離的,也就是說一部分View視圖和Contronller控制器Activity是綁定在一個類中的。網絡
使用MVC模式的優勢:
耦合性低。所謂耦合性就是模塊代碼之間的關聯程度。利用MVC框架使得View(視圖)層和Model(模型)層能夠很好的分離,這樣就達到了解耦的目的,因此耦合性低,減小模塊代碼之間的相互影響。
可擴展性好。因爲耦合性低,添加需求,擴展代碼就能夠減小修改以前的代碼,下降bug的出現率。
模塊職責劃分明確。主要劃分層M、V、C三個模塊,利於代碼的維護。
何時適合使用MVC設計模式?固然一個小的項目且無需頻繁修改需求就不用MVC框架來設計了,那樣反而以爲代碼過分設計,代碼臃腫。通常在大型項目中,且業務邏輯處理複雜,頁面顯示比較多,須要模塊化設計的項目使用MVC就有足夠的優點了。
Adapter是鏈接後端數據和前端顯示的適配器接口,是數據和UI(View)之間一個重要的紐帶。在常見的View(ListView、GridView)等地方都須要用到Adapter。
Android的適配器負責爲列表組件提供數據源,也負責將單獨的數據元素轉換爲顯示在列表組件中的特定視圖,如ListView的適配器關係以下圖所示。
Adapter自己只是一個接口,它派生了 ListAdapter和SpinnerAdapter兩個子接口,其中 ListAdapter 爲 AbsListView 提供列表項,而 SpinnerAdapter 爲 AbsSpinner 提供列表項。Adapter接口及其實現類的繼承關係圖以下圖所示。
上圖中標紅粗線框標出的是比較經常使用的Adapter。從圖中能夠看出幾乎全部的Adapter都繼承了 BaseAdapter,而BaseAdapter同時實現了 ListAdapter、SpinnerAdapter 兩個接口,所以 BaseAdapter 及其子類能夠同時爲 AbsListView、AbsSpinner提供列表項。
Adapter的幾個經常使用實現類以下。
ArrayAdapter:簡單、易用的Adapter,一般用於將數組或List集合的多個值包裝成多個列表項。
SimpleAdapter:並不簡單、功能強大的Adapter,可用於將List集合的多個對象包裝成多個列表項。
SimpleCursorAdapter:與SimpleAdapter基本類似,只是用於包裝Cursor提供的數據。
BaseAdapter:一般用於被擴展,擴展BaseAdapter能夠對各列表項進行最大限度的定製。
那麼本節先經過一個示例學習如何使用ArrayAdapter建立ListView,關於SimpleAdapter和BaseAdapter會在後續幾期進行學習,而SimpleCursorAdapter會在數據庫部分進行學習。
繼續使用WidgetSample工程的listviewsample模塊,在app/main/res/layout/目錄下建立arrayadapter_layout.xml文件,在其中填充以下代碼片斷:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 設置使用綠色的分隔條 --> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#0f0" android:dividerHeight="2px" android:headerDividersEnabled="false"/> </LinearLayout>
接下來爲ListView提供Adapter,Adapter決定了ListView所要顯示的列表項。在java包下建立ArrayAdapterActivity.java文件,加載上面新建的佈局文件,具體代碼以下:
package com.jinyu.cqkxzsxy.android.listviewsample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class ArrayAdapterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arrayadapter_layout); // 獲取界面ListView組件 ListView listView = (ListView) findViewById(R.id.listview); // 定義一個數組 final String[] books = {"初識Android開發", "Android初級開發", "Android中級開發", "Android高級開發", "Android開發進階", "Android項目實戰", "Android企業級開發"}; // 將數組包裝成ArrayAdapter ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, books); // 爲ListView設置Adapter listView.setAdapter(adapter); // 爲ListView綁定列表項點擊事件監聽器 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Toast.makeText(ArrayAdapterActivity.this, "點擊了" + books[position], Toast.LENGTH_SHORT).show(); } }); } }
上面的程序中前面兩行粗體代碼建立了一個ArrayAdapter,建立ArrayAdapter時必須指定以下三個參數。
context:要使用的上下文環境,幾乎建立全部組件都須要傳入Context對象。
resource: 要使用的視圖資源 ID,該視圖將做爲ArrayAdapter的列表項組件。這裏使用了Android系統中自帶的視圖資源,系統預約義的視圖資源主要有如下幾種:
android.R.layout.simple_list_item_1: 單獨一行的文本框。
android.R.layout.simple_list_item_2: 兩個文本框組成。
android.R.layout.simple_list_item_checked: 每項都是由一個已選中的列表項。
android.R.layout.simple_list_item_multiple_choice: 都帶有一個複選框。
android.R.layout.simple_list_item_single_choice: 都帶有一個單選鈕。
objects:要實際顯示的數組或List,將負責爲多個列表項提供數據。 該數組或List包含多少個元素,就將生成多少個列表項。
上面的程序中後面幾行粗體代碼爲ListView列表項添加點擊事件監聽器,當用戶點擊某列表項的時候,就會收到onItemClick事件,而後作消息提示或者其餘須要的處理。
修改啓動的Activity,而後運行程序,能夠看到下圖左側所示列表界面。
點擊列表中的某一項的時候,會彈出消息提示,如上圖右側所示。
關於Adapter的簡單瞭解先到這裏,其餘更復雜的Adapter使用後面陸續學習。
今天就先到這裏,若是有問題歡迎留言一塊兒探討,也歡迎加入Android零基礎入門技術討論微信羣,共同成長!
此文章版權爲微信公衆號分享達人秀(ShareExpert)——鑫鱻全部,若需轉載請聯繫做者受權,特此聲明!
往期總結分享:
Android零基礎入門第1節:Android的前世此生
Android零基礎入門第2節:Android 系統架構和應用組件那些事
Android零基礎入門第3節:帶你一塊兒來聊一聊Android開發環境
Android零基礎入門第4節:正確安裝和配置JDK, 高富帥養成第一招
Android零基礎入門第5節:善用ADT Bundle, 輕鬆邂逅女神
Android零基礎入門第6節:配置優化SDK Manager, 正式約會女神
Android零基礎入門第7節:搞定Android模擬器,開啓甜蜜之旅
Android零基礎入門第8節:HelloWorld,個人第一趟旅程出發點
Android零基礎入門第9節:Android應用實戰,不懂代碼也能夠開發
Android零基礎入門第10節:開發IDE大升級,終於迎來了Android Studio
Android零基礎入門第11節:簡單幾步帶你飛,運行Android Studio工程
Android零基礎入門第12節:熟悉Android Studio界面,開始裝逼賣萌
Android零基礎入門第13節:Android Studio配置優化,打造開發利器
Android零基礎入門第14節:使用高速Genymotion,跨入火箭時代
Android零基礎入門第15節:掌握Android Studio項目結構,揚帆起航
Android零基礎入門第16節:Android用戶界面開發概述
Android零基礎入門第17節:TextView屬性和方法大全
Android零基礎入門第18節:EditText的屬性和使用方法
Android零基礎入門第19節:Button使用詳解
Android零基礎入門第20節:CheckBox和RadioButton使用大全
Android零基礎入門第21節:ToggleButton和Switch使用大全
Android零基礎入門第22節:ImageView的屬性和方法大全
Android零基礎入門第23節:ImageButton和ZoomButton使用大全
Android零基礎入門第24節:自定義View簡單使用,打造屬於你的控件
Android零基礎入門第25節:簡單且最經常使用的LinearLayout線性佈局
Android零基礎入門第26節:兩種對齊方式,layout_gravity和gravity大不一樣
Android零基礎入門第27節:正確使用padding和margin
Android零基礎入門第28節:輕鬆掌握RelativeLayout相對佈局
Android零基礎入門第29節:善用TableLayout表格佈局
Android零基礎入門第30節:兩分鐘掌握FrameLayout幀佈局
Android零基礎入門第31節:少用的AbsoluteLayout絕對佈局
Android零基礎入門第32節:新推出的GridLayout網格佈局
Android零基礎入門第33節:Android事件處理概述
Android零基礎入門第34節:Android中基於監聽的事件處理
Android零基礎入門第35節:Android中基於回調的事件處理
Android零基礎入門第36節:Android系統事件的處理
Android零基礎入門第37節:初識ListView