Android GridView中GridAdapter 用法详解

说到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
	android:id="@+id/grid"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:columnWidth="70dp"
	android:numColumns="auto_fit" 
	android:verticalSpacing="10dp" 
	android:horizontalSpacing="10dp"
	android:stretchMode="columnWidth"
	android:gravity="center"
	/>

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>   
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="wrap_content" 
	android:layout_width="wrap_content"
	android:orientation="vertical"
	android:gravity="center"
	android:layout_gravity="center"
	>
	<LinearLayout 
		android:layout_height="wrap_content" 
		android:layout_width="wrap_content"
		android:orientation="vertical"
		android:gravity="center"
		android:layout_gravity="center">
		<ImageView 
			android:id="@+id/grid_icon"
			android:layout_height="80dip" 
			android:layout_width="80dip"
			android:gravity="center"
			android:layout_gravity="center" 
			>
		</ImageView>
		<TextView 
			android:id="@+id/grid_name"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:singleLine="true"
			android:gravity="center"
			android:layout_gravity="center"
			android:textSize="13px"
			android:layout_marginTop="4dip"
			>
		</TextView>
	</LinearLayout> 
</FrameLayout>  

java 代码:

  1. GridView grid = (GridView) findViewById(R.id.grid); 
  2. grid.setAdapter(new GridAdapter(this, mNameList, mDrawableList)); 
GridView grid = (GridView) findViewById(R.id.grid);
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.  
package com.android.test;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class GridAdapter extends BaseAdapter {
	private ArrayList<String> mNameList = new ArrayList<String>();
	private ArrayList<Drawable> mDrawableList = new ArrayList<Drawable>();
	private LayoutInflater mInflater;
	private Context mContext;
	LinearLayout.LayoutParams params;

	public GridAdapter(Context context, ArrayList<String> nameList, ArrayList<Drawable> drawableList) {
		mNameList = nameList;
		mDrawableList = drawableList;
		mContext = context;
		mInflater = LayoutInflater.from(context);
		
		params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
		params.gravity = Gravity.CENTER;
	}

	public int getCount() {
		return mNameList.size();
	}

	public Object getItem(int position) {
		return mNameList.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ItemViewTag viewTag;
		
		if (convertView == null)
		{
			convertView = mInflater.inflate(R.layout.gridview_item, null);
			
			// construct an item tag
			viewTag = new ItemViewTag((ImageView) convertView.findViewById(R.id.grid_icon), (TextView) convertView.findViewById(R.id.grid_name));
			convertView.setTag(viewTag);
		} else
		{
			viewTag = (ItemViewTag) convertView.getTag();
		}
		
		// set name
		viewTag.mName.setText(mNameList.get(position));
		
		// set icon
		viewTag.mIcon.setBackgroundDrawable(mDrawableList.get(position));
		viewTag.mIcon.setLayoutParams(params);
		return convertView;
	}
	
	class ItemViewTag
	{
		protected ImageView mIcon;
		protected TextView mName;
		
		/**
		 * The constructor to construct a navigation view tag
		 * 
		 * @param name
		 *            the name view of the item
		 * @param size
		 *            the size view of the item
		 * @param icon
		 *            the icon view of the item
		 */
		public ItemViewTag(ImageView icon, TextView name)
		{
			this.mName = name;
			this.mIcon = icon;
		}
	}

}


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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值