Android 泛型与ArrayAdapter适配器 初步入门

在看第一行代码时,多次见到适配器ArrayAdapter(其实也没几次),发现这部分知识完全不了解,就去了解一下,特此整理如下。
一 Java泛型
1.泛型简介
java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。(看得很懵是吧,我也是。那我们举个例子)
假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用 Java 泛型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。
2.泛型方法
直接举例子,这里定义了一个泛型方法printArray,定义时有一个放在函数返回值前面,你可以理解成E就是一种数据类型,但是不管是什么数据类型,都是进行同样的操作,所以这里可以用泛型方法。在主函数中调用时,分别传入整形数组,浮点型和字符型数组,都可以输出其全部元素。

public class GenericMethodTest { // 泛型方法 printArray public static < E > void printArray( E[] inputArray ) { // 输出数组元素 for ( E element : inputArray ){ System.out.printf( "%s ", element ); } System.out.println(); } public static void main( 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( "\n双精度型数组元素为:" ); printArray( doubleArray ); // 传递一个双精度型数组 System.out.println( "\n字符型数组元素为:" ); 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.

再看一下Activity中的代码,比较明显,新建了一个数组作为要传入的数据,新建ArrayAdapter类型的的adapter,通过构造函数,构造出合适的适配器,最后,调用listview的setAdapter方法传入适配器。
package com.example.test3; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity{ //定义要显示的数据 private String[] datas = {"张三","李四","王五","麻子","小强"}; private ArrayAdapter adapter; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.ll1); //初始化适配器 adapter = new ArrayAdapter<>(this,android.R.layout.simple_expandable_list_item_1,datas); listView.setAdapter(adapter); } }

泛型的支持
这次没有使用数组作为原始数据,而是使用的泛型,并将泛型的类型指定为字符串。
Android 泛型与ArrayAdapter适配器 初步入门
文章图片
最后,关于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
【Android 泛型与ArrayAdapter适配器 初步入门】3.360问答https://wenda.so.com/q/1362970519069230

    推荐阅读