标签:
1.常用ListViewAdapter的几种适配器比较
1、ArrayAdapter<T>。这是一个支持绑定任意对象数组到列表的数据适配器。这个适配器默认的View绑定是一个TextView。当这个TextView被使用的时候,
它将调用这个数组中每一个对象的toString()方法。如果需要选择性地显示数组中对象的信息,需要重写toString()方法,来满足定制化需求;如果需要显示
其它类型的View,需要通过重写getView()方法来实现。
2、BaseAdapter。这是一个共同的基类的公共实现适配器,可以在同时使用的ListView(通过实现专业化 ListAdapter接口)和微调
(通过实现专业化SpinnerAdapter接口)。总之,通过继承BaseAdapter,你可以自由定制自己的数据适配。
3、SimpleAdapter。这是一个用来绑定Map类型数据的数据适配器。
4、ListAdapter。ListAdapter是一个之间的桥梁的ListView和数据备份的列表。频繁的数据来自一个游标,但不是必需的。
ListView中可以显示,只要是包裹在一个ListAdapter任何数据。
5、CursorAdapter。CursorAdapter是用来访问Cursor的数据适配器,要求Cursor必须包含一个名为“_id”的字段,否则这个类将无法正常工作。
6、SimpleCursorAdapter。用于将光标和在一个XML文件中定义TextViews或ImageViews实现绑定。常常用于数据库的数据绑定。
2.自定义适配器的好处
3.步骤:
a.自定义一个适配器(MyAdapter),需要继承BaseAdapter,并覆写里面的方法
b.自定义数据模型,将自己定义的数据作为适配器的数据源。
c.使用该自定义的适配器。
4.案例:jobModel类的数据通过自定义的adapter添加到一个Listview里
jobModel类:
//自定义数据模型,作为适配器使用的数据源 public class JobModel { //字段,有默认值 String title="设计总监"; String content="不设要求"; String salary="1万每月"; String company_name="倒闭公司"; int is_urgent=0;//默认为0 }
MyAdapter适配器:
//自定义一个适配器(模仿simpleadapter的源码):数据源是ListitemModel //覆写以下方法时,要注意,当设置完该适配器后,程序运行它的覆盖方法的顺序是以下面的方法顺序相应的 //即getCount()是先于getView的 public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater=null; private JobModel mdata=null; private int mResource; //默认只传一个数据模型 public MyAdapter(Context context,JobModel data,int resource) { //根据context,创建一个布局填充器 mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //传入数据源 mdata=data; //传入布局文件的id:数据源放哪 mResource=resource; } @Override public int getCount() { //因为默认传入一个数据模型 Log.v("------","适配器:getCount()方法"); return 1; } @Override public View getView(int position, View convertView, ViewGroup parent) { //创建一个视图并返回 View v=null; if(convertView==null) { //用context给的布局填充器创建视图 v=mInflater.inflate(mResource,parent,false); }else{ v=convertView; } //为视图填充相应的数据(可以封装成一个bindView(int position, View view)方法) TextView tv1=(TextView)v.findViewById(R.id.title); TextView tv2=(TextView)v.findViewById(R.id.content); TextView tv3=(TextView)v.findViewById(R.id.salary); TextView tv4=(TextView)v.findViewById(R.id.company_name); TextView tv5=(TextView)v.findViewById(R.id.is_urgent); tv1.setText(mdata.title); tv2.setText(mdata.content); tv3.setText(mdata.salary); tv4.setText(mdata.company_name); return v; } @Override public long getItemId(int position) { //默认只有一个 return 0; } @Override public Object getItem(int position) { //默认只有一个 return mdata; } }
job_list_item布局文件:适配器为数据源指定的布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/salary" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/company_name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/is_urgent" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
activity_job_list布局文件:activity指定的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.example.hq.listviewdemo.JobListActivity" android:orientation="vertical" > <TextView android:text="这里是JobListActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ListView android:id="@+id/joblistview" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ListView> </LinearLayout>
使用该适配器:
//显示joblistactivity public class JobListActivity extends Activity { private ListView listView=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_job_list); listView=(ListView)findViewById(R.id.joblistview); JobModel data=new JobModel(); MyAdapter myAdapter=new MyAdapter(this,data,R.layout.job_list_item); listView.setAdapter(myAdapter); } }
效果图:
标签:
原文地址:http://www.cnblogs.com/beyondbycyx/p/4466617.html