Android 查缺补漏之Adapter 和 LayoutInflater
在之前的博客我也讲过 Adapter 和 inflater,但发现讲的不够清楚,好多读者看后有疑问,今天就结合API单独讲一次。
Adapter :
An Adapter object acts as a bridge between an AdapterView
and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View
for each item in the data set.
意思是:适配器对象作为一个adapterview和底层数据、视图之间的桥梁。适配器提供对数据项的访问。适配器还负责对数据集中的每个项目进行视图制作。
那什么是AdapterView
内容一般是包含多项相同格式资源的列表,如ListView - 列表视图控件、Gallery - 缩略图浏览器控件、GridView - 网格控件、Spinner - 下拉列表控件、AutoCompleteTextView - 自动提示文本框、ExpandableListView - 支持展开/收缩功能的列表控件等。这些控件内容不能通过ListView.add的形式添加列表项,需指定一个Adapter对象,通过它获得显示数据。
其中:
ListView 列表,其中只能含有一个控件TextView
Spinner 下拉列表,给用户提供选择
Gallery 缩略图,已经被水平的ScrollView和ViewPicker取代,但也还算常用,是一个可以把子项以中心锁定,水平滚动的列表
GridView 网格图,以表格形式显示资源,可以左右滑动的
Adapter 分类:
ArrayAdapter<数据类型> adapter = new ArrayAdapter<数据类型>(context:一般指当前Activity对象,layout:每个列表项显示的布局,data:数据源变量);
SimpleAdapter adapter = new SimpleAdapter(context:一般指当前Activity对象,data:数据源变量,layout:每个列表项显示的布局,new String[]{}:数据源中的“键”,new int[]{}:显示数据源的控件ID);
自定义Adapter类 adapter = new 自定义Adapter类构造方法
绑定AdapterView对象到Adapter上
AdapterView对象.setAdapter(Adapter对象); 如:ListView.setAdapter(MyAdapter);
inflater
LayoutInflater inflater = MainActivity.this.getLayoutInflater(); View view; if (convertView==null){ view = inflater.inflate(R.layout.item, null); }else{ view = convertView; }
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
具体作用:
知识点就这样,文档下载:Android官方API http://pan.baidu.com/s/1dFvDhFr
Be nice to people on the way up, because you'll need them on your way down.