當前位置:
首頁 > 最新 > Android 泛型與ArrayAdapter適配器 初步入門

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,來掘金你不會錯過任何一個技術乾貨。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Android開發中文站 的精彩文章:

Android程序猿 面試秘籍

TAG:Android開發中文站 |