在看第一行代码时,多次见到适配器ArrayAdapter(其实也没几次),发现这部分知识完全不了解,就去了解一下,特此整理如下。
一 Java泛型
1.泛型简介
java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。(看得很懵是吧,我也是。那我们举个例子)
假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用 Java 泛型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。
2.泛型方法
直接举例子,这里定义了一个泛型方法printArray,定义时有一个
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
实例化: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);
}
}
泛型的支持
这次没有使用数组作为原始数据,而是使用的泛型,并将泛型的类型指定为字符串。
第一个参数: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
3.360问答https://wenda.so.com/q/1362970519069230