Android适配器Adapter学习

时间:2022-12-16 17:34:37

在开发中我们需要绑定一些数据展现到桌面上,这是就需要AdapterView。AdapterView是ViewGroup的子类,它决定了怎么展现视图通过Adapter来绑定特殊的数据类型。 AdapterView是非常有帮助的当你展现数据在你的布局中。Gallery,ListView和 Spinner是AdapterView的子类。

      下面看一下AdapterView的结构图:

      Android适配器Adapter学习

      然后再看一下Adapter的结构图:

     Android适配器Adapter学习

    上面已经充分展现了他们的子类和父类的基础关系。

     下面我们看一个ListViewDemo的例子:

    先来看一个简单的adapter的例子:

   

[java] view plaincopy
  1. public class SimpleList extends ListActivity {
  2. private String[] mListString={"姓名:王魁锋","性别:男","年龄:23",
  3. "居住地:上海市普陀区","邮箱:wangkuifeng0118@126.com"};
  4. private ListView mListView=null;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. // TODO Auto-generated method stub
  8. super.onCreate(savedInstanceState);
  9. mListView=this.getListView();
  10. setListAdapter(new ArrayAdapter<String>(this,
  11. android.R.layout.simple_list_item_1,mListString));
  12. mListView.setOnItemClickListener(new OnItemClickListener() {
  13. @Override
  14. public void onItemClick(AdapterView<?> parent, View view,
  15. int position, long id) {
  16. // TODO Auto-generated method stub
  17. ).show();
  18. }
  19. });
  20. }

这里用到了系统定义好的适配模式,当然这只能用来简单的数据适配,下面看一下效果:

    Android适配器Adapter学习

    接下来看一个稍微复杂点的,SimpleAdapter怎么适配:

   

[java] view plaincopy
  1. public class IconList extends ListActivity {
  2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
  3. private String[] mListStr = { "王魁锋", "男", "23", "上海市普陀区",
  4. "wangkuifeng0118@126.com"};
  5. ListView mListView = null;
  6. ArrayList<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. // TODO Auto-generated method stub
  10. mListView = getListView();
  11. int lengh = mListTitle.length;
  12. ; i < lengh; i++) {
  13. Map<String,Object> item = new HashMap<String,Object>();
  14. item.put("image", R.drawable.portrait);
  15. item.put("title", mListTitle[i]);
  16. item.put("text", mListStr[i]);
  17. mData.add(item);
  18. }
  19. SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.iconlist,
  20. new String[]{"image","title","text"},new int[]{R.id.image,R.id.title,R.id.text});
  21. setListAdapter(adapter);
  22. mListView.setOnItemClickListener(new OnItemClickListener() {
  23. @Override
  24. public void onItemClick(AdapterView<?> parent, View view,
  25. int position, long id) {
  26. // TODO Auto-generated method stub
  27. Toast.makeText(IconList.this,"您选择了标题:" + mListTitle[position] + "    内容:"+mListStr[position], Toast.LENGTH_LONG).show();
  28. }
  29. });
  30. super.onCreate(savedInstanceState);
  31. }
  32. }

上面的数据可以是同数据库读取的也可以是从网络获取的,这里不做过多介绍,看下效果:

    Android适配器Adapter学习

      哈哈 看起来美观了些,如果要做更复杂的布局,哪就要用BaseAdapter了。先看一下布局文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent" android:layout_height="wrap_content">
  4. <ImageView android:id="@+id/color_image"
  5. android:layout_width="wrap_content" android:layout_height="fill_parent"
  6. android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
  7. android:adjustViewBounds="true"
  8. android:padding="2dip" />
  9. <TextView android:id="@+id/color_title"
  10. android:layout_width="fill_parent" android:layout_height="wrap_content"
  11. android:layout_toRightOf="@+id/color_image"
  12. android:layout_alignParentTop="true"
  13. android:layout_alignParentRight="true" android:singleLine="true"
  14. android:ellipsize="marquee"
  15. android:textSize="15dip"  />
  16. <TextView android:id="@+id/color_text"
  17. android:layout_width="fill_parent" android:layout_height="wrap_content"
  18. android:layout_toRightOf="@+id/color_image"
  19. android:layout_below="@+id/color_title"
  20. android:layout_alignParentBottom="true"
  21. android:layout_alignParentRight="true"
  22. android:singleLine="true"
  23. android:ellipsize="marquee"
  24. android:textSize="20dip" />
  25. </RelativeLayout>

下面是核心代码:

 

[java] view plaincopy
  1. public class ColorList extends ListActivity {
  2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
  3. private String[] mListText={"王魁锋","男","23","上海市普陀区","wangkuifeng0118@126.com"};
  4. private ListView mListView=null;
  5. private MyListAdapter myAdapter=null;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. // TODO Auto-generated method stub
  9. mListView=this.getListView();
  10. myAdapter=new MyListAdapter(this);
  11. this.setListAdapter(myAdapter);
  12. mListView.setOnItemClickListener(new OnItemClickListener() {
  13. @Override
  14. public void onItemClick(AdapterView<?> parent, View view,
  15. int position, long id) {
  16. // TODO Auto-generated method stub
  17. View v=parent.getChildAt(position);
  18. v.setBackgroundColor(Color.RED);
  19. ).show();
  20. }
  21. });
  22. super.onCreate(savedInstanceState);
  23. }
  24. private class MyListAdapter extends BaseAdapter{
  25. private Context mContext;
  26. private int[] colors=new int[]{0xff626569,0xff4f5257 };
  27. public MyListAdapter(Context context){
  28. mContext=context;
  29. }
  30. @Override
  31. public int getCount() {
  32. // TODO Auto-generated method stub
  33. return mListText.length;
  34. }
  35. @Override
  36. public Object getItem(int position) {
  37. // TODO Auto-generated method stub
  38. return position;
  39. }
  40. @Override
  41. public long getItemId(int position) {
  42. // TODO Auto-generated method stub
  43. return position;
  44. }
  45. @Override
  46. public View getView(int position, View convertView, ViewGroup parent) {
  47. ImageView image=null;
  48. TextView title=null;
  49. TextView  content=null;
  50. if(convertView==null){
  51. convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
  52. image=(ImageView) convertView.findViewById(R.id.color_image);
  53. title=(TextView) convertView.findViewById(R.id.color_title);
  54. content=(TextView) convertView.findViewById(R.id.color_text);
  55. }
  56. int colorPos=position%colors.length;
  57. convertView.setBackgroundColor(colors[colorPos]);
  58. title.setText(mListTitle[position]);
  59. content.setText(mListText[position]);
  60. image.setImageResource(R.drawable.portrait);
  61. return convertView;
  62. }
  63. }
  64. }

     BaseAdapter可以让我们做比较复杂的布局,只要在xml文件中设置好布局格式,在getView中分别取出放入相应的值就可以了。下面看一些效果:

   Android适配器Adapter学习

    还有一些SpinnerAdapter和SimpleCursorAdapter等系统自带的适配器,都是比较简单的,可以看下API自行练习一下,这里特别说明一下,从数据库里取出的数据最好直接放入 SimpleCursorAdapter很方便的。