安卓开发之Adapter
1、Adapter 是什么?(适配器)
Adapter本身只是一个接口,它派生了ListAdapter、SpinnerAdapter两个子接口。ListAdapter为AbsListView提供列表项、SpinnerAdapter为AbsSpinnerAdapter提供列表项。几乎所有的Adapter都继承了BaseAdapter,而BaseAdapter同时实现了ListAdapter和SpinnerAdapter两个接口,因此BSEAdapter及其子类可以同时为ABSListView和AbsSpinner提供列表项。
2、Adapter常用的实现类如下:
ArrayAdapter:简单、易用的Adapter,常用于将数组或者list集合的多个值包装成多个列表项。
SimpleAdapter:功能强大,用于将 list集合的多个对象包装成多个列表项
SimpleCursorAdapter:与SimpleAdapter基本相似,只能用于包装Cursor提供的数据。
BaseAdapter:通常用于被扩展,扩展BaseAdapter可以对各项列表项进行最大限度的定制
3、Adapter 为什么(要用它)?
Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View 。因为layout有数种布局,很多数据不能直接绑定上去,因此Android引入了Adapter机制,作为复杂数据的展示的转换载体,各种Adapter只是转换的方式和能力不一样。
Adapter常用来管理数据,使数据绑定到控件变得更简单灵活(比如列表的数据,网格的数据),为容器提供子视图,利用视图的数据和元数据来构建每个子视图。
(思路)比如这样 bear 调用了 monkey 的方法a 但是a方法的参数改了 , 这样bear 的代码也得改; 在中间加一个adapter,叫abc 这样bear 调用abc,abc调用monkey ;当monkey 的a方法发生改变时,不用改bear ,改abc就可以了。 这样可以保证变化性集中到abc
4、Adapter 怎么用?
(思路)基础的adapter用法比较简单,常见的情况是在基础的adapter上继承写一个新的,然后加入自己需要的功能,譬如列表项要是带图片带勾选按钮的,还要能对点击下拉等等。
5、使用ArrayAdapter创建ListView
在layout布局文件下的main.xml
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=http://shema.android.com/apk/res/android
Android:orientation=”vertical”
Android:layout_width=”match_parent”
Android:layout_height=”match_parent”/>
<!—设置红色的分隔条-->
<ListView
Android:id=”@+id/list”
Android:layout_width=”match_parent”
Android:layout_height=”wrap_content”
Android:divider=”#0ff” //分隔条,可用颜色,或者drawable分开
Android:dividerHeight=”2px”
Android:headerDividersEnabled=”false”/> //不在header View之后绘制分隔条
</LinearLayout>
Activity 为ListView提供Adapter,Adapter决定ListView显示的列表项
Public class ArrayAdapterTest extends Activity{
@Override
Protected void onCreate(Bundle savedInstanceState){
Super.onCreate(savedInstanceState);
setContentView(R.layou.main);
LinstView list = (ListView) findViewById(R.id.list);
//定义一个数组
String [] = {“大圣归来”,”捉妖记”,”煎饼侠”,”栀子花开”};
//将数组包装成为ArrayAdapter
ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,R.layout.array_item,arr);
//为ListView设置Adapter
List.setAdapter(adapter)
}
}
上面的R.layout.array_item布局如下
<?xml version=”1.0” encoding =”utf-8”?>
<TextView
Xmlns:android=http://schemas.android.com/apk/res/android
Android:id=”@+id/TextView”
Android:layout_width=”match_parent”
Android:layout_height=”wrap_content”
Android:textSize=”24dp”
Android:padding=”10px”
Android:shadowColor=”#0f0”
Android:shadowDx=”4”
Android:shadowDy=”4”
Android:shadowRadius=”2” />