Android 查缺补漏之Adapter 和 LayoutInflater

时间:2021-10-24 15:40:21

  在之前的博客我也讲过 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等)。

具体作用:

   1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
   2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
 
获得 LayoutInflater 实例的三种方式
   1. LayoutInflater inflater = Activity.this.getLayoutInflater();//调用Activity的getLayoutInflater() 
   2. LayoutInflater inflater = LayoutInflater.from(context);  
   3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

知识点就这样,文档下载: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.