zoukankan      html  css  js  c++  java
  • [转]Android中常用适配器及定义自己的适配器

     

    一,适配器.
    顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表, 数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。

    那么适配器是怎么处理得到的数据,并把它显示出来的呢。其实很简单,说白了适配器它也是一个类,在类里面它实现了父类的这几个方法:

     

                            publicint getCount() //得到数据的行数

     

                            public Object getItem(int position)//根据position得到某一行的记录

                  public long getItemId(int position)//的到某一条记录的ID

                   //下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要 以什么样的

                  //方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件

                 publicView getView(int position, View convertView, ViewGroup parent) 

                          我们常用的适配器一共有三个,当然不包含自定义的适配器,哪三个,我想用过的人都知道


                          那就是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 这三个,他们都是继承于BaseAdapter 。

    二,一般对于前两个适配器,他们的数据来源无非就是String[]或者List 。下面我们列举两个例一子:
                 例一,数组作为数据源,填充的是ArrayAdapter
                         public class Example extends ListActivity{

                        String[] *** = new String(){"男",“女”}//数据源

                        ArrayAdapter  adapter;//数组适配器,用的是泛型

                        public voidonCreate(Bundle SavedInstanceState){

                        super.onCreate(SavedInstanceStat);

                        //在对适配器初始化的时候,顺便把数据源装载到适配器里,                           //this.Android.R.Layout.Simple_List_Item_1这句话

                       //的意识是将数据源以系统定义好的样式放到适配器里.            


                       adapter=newArrayAdapter(this。Android.R.Layout.Simple_List_Item_1,***);

                       this.setAdapter(adapter);//这是一个控件类,所以可以直接将适配器绑定到本身对象中。

                            }

                    }

     

                例二:List作为数据源,填充的是SimpleAdapter

                            ListView list = (ListView)findViewById(R.id.MyListView);       

                           //生成动态数组,并且转载数据

                          ArrayList> mylist = newArrayList>();

                          for(int i=0;i<30;i++)

                                  {

                                           HashMapmap = new HashMap();

                                           map.put("ItemTitle","This is Title.....");

                                           map.put("ItemText","This is text.....");

                                 mylist.add(map);

                                 }

                        //生成适配器,数组===》ListItem

                          SimpleAdapter mSchedule = new SimpleAdapter(this, //没什么解释 mylist,//数据来源      R.layout.my_listitem,//ListItem的XML实现 //动态数组与ListItem对应的子项          


                          new   String[]{"ItemTitle", "ItemText"}, //ListItem的XML文件里面的两个TextView ID  new int[] {R.id.ItemTitle,R.id.ItemText});

                         //添加并且显示

                          list.setAdapter(mSchedule);

                        }

    三,应该说着两个例子都不难,都是一些我们经常见到的用法,那么对于SimpleCursorAdapter又是怎么用的呢,SimpleCursorAdapter一般主要用于数据库,它的数据来源一般都是数据库查询得到的Cursor 我们来看下面的例子:

                        String uriString = “content://contacts/people/”;

     

     

                         Cursor myCursor =managedQuery(Uri.parse(uriString), null, null, null, null);

              String[] fromColumns = new String[]{People.NUMBER, People.NAME};

                        int[] toLayoutIDs = new int[] {R.id.nameTextView, R.id.numberTextView};

                       SimpleCursorAdapter myAdapter;

                       myAdapter=newSimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor,fromColumns,

                       toLayoutIDs);//传入当前的上下文、一个layout资源,一个游标和两个数组:一个包含使用的列   

                       //的名字,另一个(相同大小)数组包含View中的资源ID,用于显示相应列的数

                       据值。

                       myListView.setAdapter(myAdapter);

    我们把一个游标绑定到了ListView上,并使用自定义的layout显示来显示每一个Item。

     

    四,下面我们来定义自己的适配器。

                 为什么要定义自己的适配器呢,原因就在于,当我们想用一些其它的展现方式,或者是我们需要的,呈现方式,这是就得DIY了。

    首先我们定义一个类让它继承自BaseAdapter,再让它实现一里面所说的那几个方法。那么这个自定义适配器就算好了。

    里面的一些方法我在上面都介绍过了,在这就不在赘述了。


                             public class ImageAdapter extendsBaseAdapter {

                                            private Context mcontext;
                                                      };

                                           //构造函数里面有两个参数,一个是数据的来源,另一个是上下文。

                             public ImageAdapter(Integer[] imgIds,Context c){

                                            mcontext=c;

                                            imageIds=imgIds;

                                                     }

                             publicint getCount() {

                                     // TODO Auto-generated method stub

                                    return imageIds.length;

                                                    }

     

                              publicObject getItem(int position) {

                                       // TODO Auto-generated method stub

                                      return null;

                                                    }

     

                              publiclong getItemId(int position) {

                                     // TODO Auto-generated method stub

                                    return position;

                                     }

     

                               //主要工作是做在这里,可以自定义布局,在这里我就不多说了

                             publicView getView(int position, View convertView, ViewGroup parent) {

                                // TODO Auto-generated method stub

                                         ImageView imageview = newImageView(mcontext);

                                         imageview.setImageResource(imageIds[position]);

                                          imageview.setLayoutParams(newGallery.LayoutParams(120,120));

                                          imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);

                                          return imageview;

                                       }

                     }

     最后这个适配器就可以用了,收工。

  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/ZhuRenWang/p/4830563.html
Copyright © 2011-2022 走看看