Android 泛型與ArrayAdapter適配器 初步入門
在看第一行代碼時,多次見到適配器ArrayAdapter(其實也沒幾次),發現這部分知識完全不了解,就去了解一下,特此整理如下。
一 Java泛型1.泛型簡介
java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。(看得很懵是吧,我也是。那我們舉個例子)
假定我們有這樣一個需求:寫一個排序方法,能夠對整型數組、字元串數組甚至其他任何類型的數組進行排序,該如何實現?答案是可以使用 Java 泛型。使用 Java 泛型的概念,我們可以寫一個泛型方法來對一個對象數組排序。然後,調用該泛型方法來對整型數組、浮點數數組、字元串數組等進行排序。
2.泛型方法
直接舉例子,這裡定義了一個泛型方法printArray,定義時有一個放在函數返回值前面,你可以理解成E就是一種數據類型,但是不管是什麼數據類型,都是進行同樣的操作,所以這裡可以用泛型方法。 在主函數中調用時,分別傳入整形數組,浮點型和字元型數組,都可以輸出其全部元素。
publicclassGenericMethodTest
{
// 泛型方法 printArray
publicstaticvoidprintArray(E[] inputArray)
{
// 輸出數組元素
for( E element : inputArray ){
System.out.printf("%s ", element );
}
System.out.println();
}
publicstaticvoidmain(String args[])
{
// 創建不同類型數組: Integer, Double 和 Character
Integer[] intArray = {1,2,3,4,5};
Double[] doubleArray = {1.1,2.2,3.3,4.4};
Character[] charArray = {"H","E","L","L","O"};
System.out.println("整型數組元素為:");
printArray( intArray );// 傳遞一個整型數組
System.out.println("
雙精度型數組元素為:");
printArray( doubleArray );// 傳遞一個雙精度型數組
System.out.println("
字元型數組元素為:");
printArray( charArray );// 傳遞一個字元型數組
}
}
看了這個,或許能理解到一點「泛型」的意義了。
3.java中的List(好像不屬於泛型,管他呢,先放這)
List( []內的內容可省略),與數組類似:但是長度可變,應該是能+-50%?
實例化:List[] list = new ArrayList[]();
一些方法舉例(後面會遇到)
獲得集合內元素個數:list.size();
添加元素:
默認添加:list.add(e);
4.更多
泛型類,類型匹配符等,詳見http://www.runoob.com/java/java-generics.html
二 android中的ArrayAdapter適配器
適配器是一個非常重要的知識點,Adapter是用來幫助填出數據的中間橋樑,簡單點說吧:將各種數據以合適的形式顯示在View中給用戶看。Adapter有很多的介面、抽象類、子類可以使用。主要有BaseAdapter,ArrayAdapter,SimpleAdapter。
ArrayAdapter(數組適配器),這個適配器使用有一定的局限性,只能顯示一行文本數據。支持泛型。
先建一個layout,只有一個ListView.
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/ll1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
再看一下Activity中的代碼,比較明顯,新建了一個數組作為要傳入的數據,新建ArrayAdapter類型的的adapter,通過構造函數,構造出合適的適配器,最後,調用listview的setAdapter方法傳入適配器。
packagecom.example.test3;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.widget.ArrayAdapter;
importandroid.widget.ListView;
publicclassMainActivityextendsActivity{
// 定義要顯示的數據
privateString[] datas = {"張三","李四","王五","麻子","小強"};
privateArrayAdapter adapter;
privateListView listView;
@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.ll1);
// 初始化適配器
adapter =newArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,datas);
listView.setAdapter(adapter);
}
}
泛型的支持
這次沒有使用數組作為原始數據,而是使用的泛型,並將泛型的類型指定為字元串。
最後,關於ArrayAdapter的構造方法傳入的參數
第一個參數:context上下文對象
第二個參數:每一個item的樣式,可以使用系統提供,也可以自定義就是一個TextView
第三個參數:數據源,要顯示的數據
系統提供的item的樣式,可以試一試
simple_list_item1:單獨的一行文本框
simple_list_item2:有兩個文本框組成
simple_list_item_checked每項都是由一個已選中的列表項
simple_list_item_multiple_choice:都帶有一個複選框
simple_list_item_single_choice:都帶有一個單選框
三 特別感謝
文章主要摘自以下幾部分,加上部分自我感悟
1.java菜鳥教程http://www.runoob.com/java/java-generics.html
2.「會飛的一隻狼」的博客https://www.cnblogs.com/huolan/p/5126794.html
=======分隔符========
給大家推薦個活躍的開發者社區:掘金是面向程序員的的技術社區,從大廠技術分享到安卓開發最佳實踐,掃二維碼下載掘金APP,來掘金你不會錯過任何一個技術乾貨。
TAG:Android開發中文站 |