Android学习_7/27
一、 自定义控件
1. 引入布局
多个活动需要相同的布局时,使用引入布局的方式来实现代码复用。
activity_main.xlm中加入<include layout=”@layout/title”>
2. 创建自定义控件
如果引入的布局要求能够响应事件且功能都相同,为了避免为这些控件单独编写事件注册代码,最好采用自定义控件。
step1:新建自定义控件的类(TitleLayout)。
使用LayoutInflater实现动态加载布局:
LayoutInflater.from(context).inflate(R.layout.title,this); // from()方法构建LayoutInflater对象; inflate()方法的第一个参数是要加载的布局的id,第二个参数是给加载好的布局添加父布局。
step2:重写构造方法,为控件注册事件。
step3:在布局文件activity_main.xlm中添加自定义控件,添加自定义控件时要指明控件的完整类名。
<com.sprd.uilayouttest.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
二、 ListView
1. Adapter
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:
Android中所有的Adapter一览:
由图可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等。
u BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性。
u ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
u SimpleAdapter有最好的扩充性,可以自定义出各种效果。
u SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
2. ListView的简单用法
step1:布局中加入ListView
step2:使用Adapter传递数据,建立ListView与数据的关联
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,android.R.layout.simple_list_item_1,data);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
android.R.layout.simple_list_item_1作为ListView子项的布局的id,是Android内置的布局文件,里面只有一个TextView。
setAdapter()传入构建好的适配器对象。
3. 定制ListView的界面
step1:定义ListView适配器适配的实体类。
step2:为ListView的子项指定一个自定义的布局。
step3:创建自定义适配器。
getView(int position, View convertView, ViewGroup parent)方法:每个子项被滚动到屏幕内的时候会被调用,在getView()方法中,首先通过getItem()方法得到当前项的Fruit实例,然后使用LayoutInflater来为这个子项。加载我们传入的布局。
4. 提升ListView的运行效率
缓存布局:使用getView()的convertView缓存布局。
缓存控件的实例:新增内部类ViewHolder缓存控件的实例,然后调用View的setTag()方法将ViewHolder对象存储在View中。