一:常见适配器的种类
其中,标有红色区域的是常用适配器,BaseAdapter,ArrayAdapter
(1)这些适配器之间的关系?
a.从上图中可以看出,处于最上部是BaseAdapter,它是ArrayAdapter
b.ArrayAdapter
c.SimpleCursorAdapter,它是BaseAdapter的间接子类!
(2)如何理解这些适配器?
这个问题,是所有学android的开发者,必定要想的问题!
对于学习过javaweb的mvc框架来说,了解适配器应该是一个相当的easy!
我个人理解:它拥有自己的控制,可以将数据和View融合,但它不是view,不能显示,只有将其与一些控件一起使用,它才会发挥它超常的作用!
简单而言,它就是拥有数据和view的结合体,当然它最大的用处就是可以作为一些组件的数据和view的匹配体!
(3)这些适配器之间的区别?
子类与父类的关系:BaseAdapter父类,直接子类ArrayAdapter和SimpleAdapter;间接子类:SimpleCursorAdapter
其他区别,在于所使用的范围和类型不同,ArrayAdapter
SimpleAdapter简单的适配器,可以创建一些简单的适配器
SimpleCursorAdapter具有简单Cursor的适配器,该适配器往往与数据库Sqlite一起使用
而BaseAdapter是抽象(父类),它的使用范围更广,提供了一些构造适配器抽象方法,当然它的随意性更强,你可以继承它创建自己所需要的适配器!
(4)对于这些适配器的创建,他们的构造方法(或者父类的构造方法)中参数的含义?
a.ArrayAdapter
//第一个参数context,第二个参数是布局文件,第三个是ArrayList
ArrayAdapter
this,
android.R.layout.simple_expandable_list_item_1,
getData());
private ArrayList
{
list.add("dfdfdf");
list.add("qewwr ");
list.add("热爱code");
list.add("adsdsd");
return list;
}
b.SimpleAdapter
adapter = new SimpleAdapter(this,list,android.R.layout.simple_list_item_2,new String[]{"text2","text1"},new int[]{android.R.id.text1,android.R.id.text2}); //使用android子给的布局文件和布局文件中的text控件
adapter = new SimpleAdapter(this,list,R.layout.view,new String[]{"text2","text1"},new int[]{R.id.textview1,R.id.textview2});
//所用的布局文件和对应的控件都是自定义的
该适配器完成了很简单的功能,仅仅只操作这一个仅仅拥有两个TextView的布局文件,和一个简单的数据资源,String数组资源!
//参数:第一个参数:Context,第二个参数:布局文件,第三个参数:String数组(数据资源) 第四个参数:布局文件中的text控件
c.SimpleCursorAdapter此处就不加以累赘了,因为它的使用一般都会和数据库、ContentProvider等进行打交道
d.继承BaseAdapter,复写哪些没有实现的方法!可以让你自定仪的适配器,View更加随意,数据更加随意,你可以随意创造你想要的布局!
(5)讲述一个BaseAdapter的例子!
这里直接贴上一个ListView与BaseAdapter结合使用的代码
R.layout.per_item布局文件
android:layout_height="fill_parent">
android:layout_marginLeft="5dp" android:layout_centerVertical="true" />
android:layout_centerVertical="true" android:textSize="20sp"
android:layout_toRightOf="@id/iv" />
/**
* 为ListView所写的适配器
*
*
*/
public class ItemAdapter extends BaseAdapter {
public Context context = null;
private String[] str = null;//字符数组
private BoardLayout bdLayout = null;//item界面类
private View view = null;//item的view
/**
*
* @param context
* activity的context
* @param str
* 字符串资源文件
*/
public ItemAdapter(Context context, String[] str) {
this.context = context;
this.str = str;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return str.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return str[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.per_item, null, false);
bdLayout = (BoardLayout) view.getTag();
if (bdLayout == null) {
bdLayout = new BoardLayout();
bdLayout.relayout = (RelativeLayout) view
.findViewById(R.id.relayout);
bdLayout.img = (ImageView) bdLayout.relayout.findViewById(R.id.iv);
bdLayout.tv = (TextView) bdLayout.relayout.findViewById(R.id.tv);
view.setTag(bdLayout);
}
// bdLayout.img.setBackgroundResource(R.drawable.base_an);
bdLayout.tv.setText(str[position]);
return view;
}
/**
* 界面类
*
* @author Administrator caoxinyuan
*
*/
class BoardLayout {
RelativeLayout relayout;
ImageView img;
TextView tv;
}
}
然后就是ListView的创建,
最后给ListView加上该适配器!
就ok了!
然后使用适配器的其他组件有:GridView、Gallery、Spinner、ExpandableListView等!