android Adapter综合使用(ArrayAdapter、SimpleAdapter、Bas

android Adapter综合使用(ArrayAdapter、SimpleAdapter、BaseAdapter在ListView和GridView中的使用)

    在转载的android Adapter综合介绍中对Adapter接口及他的子接口或相关子类进行了详细的介绍,也对他的常用方法和各种子类适用在那种场所进行了介绍。接下来通过实例和代码分析来了解他的使用。

一、比较常用的有BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

①BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;

② ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;

③ SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。

④ 若你的数据来源于一个Arraylist 就使用BaseAdapter,SimpleAdapter,而数据来源于通过查询数据库获得Cursor那就使用SimpleCursorAdapter等。

二、ArrayAdapter在ListView中使用

        该使用方法主要是以文本为内容的列表。

    1、在xml文件中添加ListView元素

        ①通过array元素添加ListView的内容     

[html] view plaincopy

  1. <ListView  

  2.                   android:layout_width="fill_parent"  

  3.                   android:layout_height="wrap_content"  

  4.                  android:entries="@array/books"       通过数组设置向列表中添加的内容  

  5.                   android:divider="@drawable/red"/>//设置每个内容的分隔符  

        ②通过数组添加ListView的内容         

[html] view plaincopy

  1. <ListView  

  2.                   android:id="@+id/list"  

  3.                   android:layout_width="fill_parent"  

  4.                   android:layout_height="wrap_content">  

             在java代码中通过ArrayAdapter的对象向ListView中添加内容        

[java] view plaincopy

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

  2.           String []arr = {" 郑州铁路职业技术学院","无线电协会","创新室"};  

  3.           //将数组包装ArrayAdapter  

  4.           ArrayAdapter <String>arrayAdapter = new ArrayAdapter<String>( this,android.R.layout.simple_list_item1,arr);  

  5.           list.setAdapter(arrayAdapter);//为ListView设置Adapter  

            public ArrayAdapter (Context context, int textViewResourceId, T[] objects) 中textViewResource的属性值:

            simple_list_item_1:TextView

            simple_list_item_2:TextView(字体略大);

            simple_list_item_checked:每个列表项都是一个已勾选的列表项。

            simple_list_item_multiple_choice:每个列表都是带多选框的文本。

            simple_list_item_single_choice:每个列表项都是带多单选按钮的文本。

            使用:

 

[java] view plaincopy

  1. list.SetOnItemClickListener(new OnItemClickListener(){  

  2.      @Override  

  3.      public void onItemClickListener(AdapterView<?>parent,View arg1,int pos,long id){  

  4.          String result= parent.getItemPosition(pos).toString();  

  5.          }});  

            ③让Activity继承ListActivity实现列表

      

[java] view plaincopy

  1. public class MainActivity ListActivity{  

  2.       @Override  

  3.       public void onCreate(Bundle savedInstanceState){  

  4.           super.onCreate(savedInstanceState){  

  5.           String[]ctype = new String[]{"郑州铁路职业技术学院","无线电协会","www.wxdxh.net"};  

  6.           ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_single_choice,ctype);  

  7.           setListAdapter(adapter);  

  8.       }}  



            使用:

[java] view plaincopy

  1. @Override  

  2.           protected void onListItemClick(ListView l,View v,int position,long id){  

  3.   

  4.               super.onListItemClick(l,v,position,id);  

  5.   

  6.                   String result = l.getItemAtPosition(position).toString();}  


        ④ArrayAdapter类:一个管理这样的ListView的ListAdapter:这个ListView被一个数组所支持。这个数组可装任意对象。默认状态下,这个类预期能这样:提供的资源id与一个单独的TextView相关联。如果你想用一个更复杂的layout,就要用包含了域id的构造函数。这个域id能够与一个在更大的layout资源里的TextView相关联。它将被在数组里的每个对象的toString()方法所填满。你可以添加通常对象的lists或arrays。重写你对象的toString()方法来决定list里哪一个写有数据的text将被显示。如果想用一些其它的不同于TextView的view来显示数组(比如ImageViews),或想有一些除了toString()返回值所填在views里的以外的数据,你就要重写getView(int,View,ViewGroup)方法来返回你想要的View类型。

    三、SimapleAdapter在ListView中的使用

            该使用方法主要是自定义内容的列表。

        ①、在xml中自定义列表中的项

            主界面元素:

     

[html] view plaincopy

  1. <ListView  

  2.   

  3.             android:layout_width="fill_parent"  

  4.   

  5.              android:layout_height="wrap_content"  

  6.   

  7.              android:id="@+id/listView1"  

  8.          >  

            自定义元素内容:

           

[html] view plaincopy

  1. <LinearLayout  

  2.                    android:orientation="horizontal"  

  3.                    andrlod:layout_width="match_parent"  

  4.                    android:layout_height="match_parent">  

  5.             <ImageView  

  6.                android:id="@+id/image"  

  7.                 android:paddingRigth="10px"      

  8.                android:paddingTop="20px"  

  9.               android:paddingBotton="20px"  

  10.   

  11.   

  12.                 android:adjustViewBounds="true"//可以自动调整View的大小  

  13.   

  14.   

  15.                 android:maxWidth="72px"  

  16.   

  17.   

  18.                 android:maxHeight="72px"  

  19.   

  20.   

  21.                 android:layout_height="wrap_content"  

  22.   

  23.   

  24.                 android:layout_width="wrap_content"/>  

  25.   

  26.   

  27.             <TextView  

  28.   

  29.   

  30.                 android:layout_width="wrap_content"  

  31.   

  32.   

  33.                 android:layout_height="wrap_content"  

  34.   

  35.   

  36.                 android:padding="10px"  

  37.   

  38.   

  39.                 android:layout_gravity="center"  

  40.   

  41.   

  42.                 android:id="@+id/title"/>  

            ②在JAVA中为ListView添加内容

[java] view plaincopy

  1. listView listview = (ListView)findViewById(R.id.listView1);  

  2.   

  3. int[] imageId = new int[]{R.drawable.imag0,R.drawable.imag1,R.drawable.imag2};  

  4.   

  5. String[] title = new String[]{"郑州铁路职业技术学院","无线电协会",www.wxdxh.net};  

  6.   

  7. List<Map<String,Object>>listItems = new ArrayList<Map<String,Object>>();//创建一个List集合  

  8.   

  9. for(int i=0;i<imageld.length;i++){//遍历数组  

  10.   

  11.     Map<String,Object>map = new HashMap<String,Object>();//创建哈希表  

  12.   

  13.     map.put("image",imageId[i]);  

  14.   

  15.     map.put("title",title[i]);  

  16.   

  17.     listItems.add(map);}  

  18.   

  19. SimpleAdapter adapter = new SimpleAdapter(this,listItems,R.layout.items,new String[]{"title","image"},new  

  20.   

  21. int[]{"R.id.title","R.id.image"});   

  22.   

  23. listView.setAdapter(adapter);    

  24.   

  25. //SimpleAdapter(Context, List<? extends Map<String, ?>>, int, String[], int[]);  

            ③、SimpleAdapter类:一个使静态数据和在XML中定义的Views对应起来的简单adapter。你可以把list上的数据指定为一个Map范型的ArrayList。ArrayList里的每一个条目对应于list里的一行。Maps包含着每一行的数据。你先要指定一个XML,这个XML定义了用于显示一行的view。你还要指定一个对应关系,这个对应关系是从Map的keys对应到指定的views。

 

绑定数据到views发生在两个阶段:如果一个simpleAdapter.ViewBinder是可用的,那么SetViewValue(android.view.View,Object,String)要被调用。如果返回true,那么绑定发生了。如果返回false,那么如下views将被按顺序地尝试:

~实现了Checkable的View(如CheckBox),预期的绑定值是boolen

~TextView,预期的绑定值是String,并且SetViewText方法被调用

~ImageView,预期的绑定值是一个资源的id或String。并且SetViewImage方法被调用

如果没有合适的绑定被发现,一个IllegalStateException被抛出。  

四、SimpleAdapter在GridView中使用 

    1、添加布局和资源

   ①、 在布局文件中添加GridView

[html] view plaincopy

  1. <GridView android:id="@+id/gridView1"  

  2.   

  3.         android:layout_widtn="wrap_content"  

  4.   

  5.         android:layout_height="match_parent"     

  6.   

  7.         android:stretchMode="columnWidth"  设置拉伸模式-仅拉伸表格元素本身                              

  8.   

  9.         android:numColimns="4"></GridView> 设置列数  



[html] view plaincopy

  1. <GridView android:id="@+id/gridView1"  

  2.   

  3.         android:layout_widtn="wrap_content"  

  4.   

  5.         android:layout_height="match_parent"     

  6.   

  7.         android:stretchMode="columnWidth"  设置拉伸模式-仅拉伸表格元素本身                              

  8.   

  9.         android:numColimns="4"></GridView> 设置列数  

    ②、在新建的资源中添加内容

[html] view plaincopy

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  2.   

  3.     android:id="@+id/item"  

  4.   

  5.     android:layout_width="wrap_content"  

  6.   

  7.     android:layout_height="wrap_content"  

  8.   

  9.     android:layout_marginTop="5dp"//设置据顶部边缘的距离  

  10.   

  11.     android:orientation="vertical" >  

  12.   

  13.       

  14.   

  15.     <ImageView android:id="@+id/image"  

  16.   

  17.         android:layout_width="75dp"  

  18.   

  19.         android:layout_height="75dp"   

  20.   

  21.         android:layout_gravity="center"  

  22.   

  23.         android:scaleType="fitXY"//设置比例类型为适合XY  

  24.   

  25.         android:padding="4dp"/>  

  26.   

  27.       

  28.   

  29.     <TextView android:id="@+id/title"  

  30.   

  31.         android:layout_width="wrap_content"  

  32.   

  33.         android:layout_height="wrap_content"  

  34.   

  35.         android:layout_gravity="center"  

  36.   

  37.         android:gravity="center_horizontal"  

  38.   

  39.         />  

  40.   

  41. </LinearLayout>                    

      2、在Java代码中为GridViw添加内容

            GridView中添加内容和ListView的内容一样,参考 ListView。

五、BaseAdapter在GridView中的使用     

        BaseAdapter抽象类:是一个实现了既能在ListView(实现了ListAdapter接口)和Spinner(实现了Spinner 接口)里用的Adapter类的一般基类。

        1、用BaseAdapter在GridView中只显示网格式图片 

            ①新建BaseAdapter对象,重写getView方法

[html] view plaincopy

  1.   @Override  

  2.   

  3.                 public View getView(int position,View convertView ViewGroup parent){  

  4.   

  5.                 ImageView imageView;  

  6.   

  7.                 if(convertView==null){  

  8.   

  9.                     imageview=new ImageView(MainActivity.this);  

  10.   

  11.                     imageview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);//设置比例类型  

  12.   

  13.                     imageview.setPadding(5,0,5,0);}  

  14.   

  15.                 else{  

  16.   

  17.                     imageview=(ImageView)convertView;  

  18.   

  19.                     }  

  20.   

  21.                     imageview.setImageResource(imageId[position]);//设置图片内容  

  22.   

  23.                     return imageview;  

  24.   

  25. }  

        ②使用

            gridview.setAdapter(adapter);

总结:以上是Adapter的子类在列表和网格视图中的应用,只罗列出了关键代码和分析,有好多地方只是理解但是因为水平原因无法表达,希望和其他学习者共同解决。


你可能感兴趣的:(android Adapter综合使用(ArrayAdapter、SimpleAdapter、Bas)