Android GridView中GridAdapter 用法详解


说到Android GridView Listview一定会提到他的adapter,现整理如下:

main.xml布局里面:

  1. <GridView  
  2.     android:id="@+id/grid"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:columnWidth="70dp"  
  6.     android:numColumns="auto_fit"   
  7.     android:verticalSpacing="10dp"   
  8.     android:horizontalSpacing="10dp"  
  9.     android:stretchMode="columnWidth"  
  10.     android:gravity="center"  
  11.     />  

gridview_item.xml:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_height="wrap_content"   
  4.     android:layout_width="wrap_content"  
  5.     android:orientation="vertical"  
  6.     android:gravity="center"  
  7.     android:layout_gravity="center"  
  8.     >  
  9.     <LinearLayout   
  10.         android:layout_height="wrap_content"   
  11.         android:layout_width="wrap_content"  
  12.         android:orientation="vertical"  
  13.         android:gravity="center"  
  14.         android:layout_gravity="center">  
  15.         <ImageView   
  16.             android:id="@+id/grid_icon"  
  17.             android:layout_height="80dip"   
  18.             android:layout_width="80dip"  
  19.             android:gravity="center"  
  20.             android:layout_gravity="center"   
  21.             >  
  22.         </ImageView>  
  23.         <TextView   
  24.             android:id="@+id/grid_name"  
  25.             android:layout_width="wrap_content"  
  26.             android:layout_height="wrap_content"  
  27.             android:singleLine="true"  
  28.             android:gravity="center"  
  29.             android:layout_gravity="center"  
  30.             android:textSize="13px"  
  31.             android:layout_marginTop="4dip"  
  32.             >  
  33.         </TextView>  
  34.     </LinearLayout>   
  35. </FrameLayout>    

java 代码:

  1. GridView grid = (GridView) findViewById(R.id.grid);  
  2. grid.setAdapter(new GridAdapter(this, mNameList, mDrawableList));  

GridAdapter.java类:

  1. package com.android.test;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.content.Context;  
  6. import android.graphics.drawable.Drawable;  
  7. import android.view.Gravity;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.ImageView;  
  13. import android.widget.LinearLayout;  
  14. import android.widget.TextView;  
  15.   
  16. public class GridAdapter extends BaseAdapter {  
  17.     private ArrayList<String> mNameList = new ArrayList<String>();  
  18.     private ArrayList<Drawable> mDrawableList = new ArrayList<Drawable>();  
  19.     private LayoutInflater mInflater;  
  20.     private Context mContext;  
  21.     LinearLayout.LayoutParams params;  
  22.   
  23.     public GridAdapter(Context context, ArrayList<String> nameList, ArrayList<Drawable> drawableList) {  
  24.         mNameList = nameList;  
  25.         mDrawableList = drawableList;  
  26.         mContext = context;  
  27.         mInflater = LayoutInflater.from(context);  
  28.           
  29.         params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);  
  30.         params.gravity = Gravity.CENTER;  
  31.     }  
  32.   
  33.     public int getCount() {  
  34.         return mNameList.size();  
  35.     }  
  36.   
  37.     public Object getItem(int position) {  
  38.         return mNameList.get(position);  
  39.     }  
  40.   
  41.     public long getItemId(int position) {  
  42.         return position;  
  43.     }  
  44.   
  45.     public View getView(int position, View convertView, ViewGroup parent) {  
  46.         ItemViewTag viewTag;  
  47.           
  48.         if (convertView == null)  
  49.         {  
  50.             convertView = mInflater.inflate(R.layout.gridview_item, null);  
  51.               
  52.             // construct an item tag   
  53.             viewTag = new ItemViewTag((ImageView) convertView.findViewById(R.id.grid_icon), (TextView) convertView.findViewById(R.id.grid_name));  
  54.             convertView.setTag(viewTag);  
  55.         } else  
  56.         {  
  57.             viewTag = (ItemViewTag) convertView.getTag();  
  58.         }  
  59.           
  60.         // set name   
  61.         viewTag.mName.setText(mNameList.get(position));  
  62.           
  63.         // set icon   
  64.         viewTag.mIcon.setBackgroundDrawable(mDrawableList.get(position));  
  65.         viewTag.mIcon.setLayoutParams(params);  
  66.         return convertView;  
  67.     }  
  68.       
  69.     class ItemViewTag  
  70.     {  
  71.         protected ImageView mIcon;  
  72.         protected TextView mName;  
  73.           
  74.         /** 
  75.          * The constructor to construct a navigation view tag 
  76.          *  
  77.          * @param name 
  78.          *            the name view of the item 
  79.          * @param size 
  80.          *            the size view of the item 
  81.          * @param icon 
  82.          *            the icon view of the item 
  83.          */  
  84.         public ItemViewTag(ImageView icon, TextView name)  
  85.         {  
  86.             this.mName = name;  
  87.             this.mIcon = icon;  
  88.         }  
  89.     }  
  90.   
  91. }  

到此,adapter的使用就算结束,效果图如下:


android

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容