适配器和使用适配器的一些组件

一:常见适配器的种类

其中,标有红色区域的是常用适配器,BaseAdapter,ArrayAdapter<T>,SimpleAdapter,SimpleCursorAdapter.

(1)这些适配器之间的关系?

a.从上图中可以看出,处于最上部是BaseAdapter,它是ArrayAdapter<T>、SimpleAdapter、ArrayAdapter<T>的父类,是一个抽象类!

b.ArrayAdapter<T>和SimpleAdapter是他们的直接子类!

c.SimpleCursorAdapter,它是BaseAdapter的间接子类!

(2)如何理解这些适配器?

这个问题,是所有学android的开发者,必定要想的问题!

对于学习过javaweb的mvc框架来说,了解适配器应该是一个相当的easy!

我个人理解:它拥有自己的控制,可以将数据和View融合,但它不是view,不能显示,只有将其与一些控件一起使用,它才会发挥它超常的作用!

简单而言,它就是拥有数据和view的结合体,当然它最大的用处就是可以作为一些组件的数据和view的匹配体!

(3)这些适配器之间的区别?

子类与父类的关系:BaseAdapter父类,直接子类ArrayAdapter和SimpleAdapter;间接子类:SimpleCursorAdapter

其他区别,在于所使用的范围和类型不同,ArrayAdapter<T>:大家都知道T是泛型的一个标志,具有泛型T对象的数组适配器!

SimpleAdapter简单的适配器,可以创建一些简单的适配器

SimpleCursorAdapter具有简单Cursor的适配器,该适配器往往与数据库Sqlite一起使用

而BaseAdapter是抽象(父类),它的使用范围更广,提供了一些构造适配器抽象方法,当然它的随意性更强,你可以继承它创建自己所需要的适配器!

(4)对于这些适配器的创建,他们的构造方法(或者父类的构造方法)中参数的含义?

a.ArrayAdapter<T>,举例子ArrayAdapter<String>

//第一个参数context,第二个参数是布局文件,第三个是ArrayList<String>    

  ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_expandable_list_item_1,
                getData());


  private ArrayList<String> getData()
    {
        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布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relayout" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/iv" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/base_an"
android:layout_marginLeft="5dp" android:layout_centerVertical="true" />
<TextView android:id="@+id/tv" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/gs_name"
android:layout_centerVertical="true" android:textSize="20sp"
android:layout_toRightOf="@id/iv" />
</RelativeLayout>





/**
 * 为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等!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值