Android GridView用法,用到了BaseAdapter

先看效果图:

                               

XML代码:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context=".GridViewDemoBA" >
 6     
 7     <!-- android:listSelector="@drawable/bg"
 8 
 9    该属性很重要,如果不设置的话,GridView控件会自带自己的选中样式(黄色边框), -->
10     <GridView 
11         android:id="@+id/gv_gridviewdemoba_mygv"
12         android:layout_width="fill_parent"
13         android:layout_height="wrap_content"
14         android:horizontalSpacing="8pt"
15         android:verticalSpacing="0pt"
16         android:numColumns="4"
17         android:stretchMode="columnWidth" 
18         android:listSelector="@drawable/select_after_large">
19       
20     </GridView>
21 </LinearLayout>

适配器代码,继承自BaseAdapter

  1 package com.example.gridviewdemoba;
  2 
  3 import android.R.integer;
  4 import android.content.Context;
  5 import android.view.View;
  6 import android.view.ViewGroup;
  7 import android.widget.BaseAdapter;
  8 import android.widget.GridView;
  9 import android.widget.ImageView;
 10 
 11 /**
 12  * @author ..0
 13  *适配器,继承自BaseAdapter
 14  */
 15 public class ImageAdpter extends BaseAdapter {
 16 
 17     //定义Context
 18     private Context  mContext;
 19     
 20     //定义整型数组,即图片源
 21     private int[]  mImageIds =
 22         {
 23             R.drawable.im1,
 24             R.drawable.im2,
 25             R.drawable.im3,
 26             R.drawable.im4,
 27             R.drawable.im5,
 28             R.drawable.im6,
 29             R.drawable.im7
 30         };
 31     
 32      public ImageAdpter (Context c)
 33      
 34          {
 35      
 36              mContext = c;
 37      
 38          }
 39 
 40     
 41 
 42     @Override
 43     // 获取图片的个数
 44     public int getCount() {
 45         // TODO Auto-generated method stub
 46         return mImageIds.length;
 47     }
 48     
 49     // 获取图片在库中的位置
 50     @Override
 51     public Object getItem(int position) {
 52         // TODO Auto-generated method stub
 53         return position;
 54     }
 55     
 56     // 获取图片ID
 57     @Override
 58     public long getItemId(int position) {
 59         // TODO Auto-generated method stub
 60         return position;
 61     }
 62 
 63     @Override
 64     public View getView(int position, View convertView, ViewGroup parent) {
 65         // TODO Auto-generated method stub
 66         ImageView imageview = null;
 67         
 68         //如果子条目还没有创建过view
 69         if (convertView == null) 
 70         {
 71             
 72             //给ImageView设置资源
 73             imageview = new ImageView(mContext);
 74             
 75             /*动态构建ImageView的布局,用到了控件的setLayoutParams*/
 76             /*其实这个LayoutParams类是用于child view(子视图) 
 77             向 parent view(父视图)传达自己的意愿的一个东西
 78                (孩子想变成什么样向其父亲说明)其实子视图父视图可以简单理解成
 79             LayoutParams继承于Android.View.ViewGroup.LayoutParams.
 80             LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。
 81                  假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,
 82                  最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
 83                   可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每
 84                   个棋子都有一个位置的信息,如这个棋子在4行4列,这里的“4行4列”就是棋子的LayoutParams。
 85 
 86                      但LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
 87                1,一个确定的值;
 88                2,FILL_PARENT,即填满(和父容器一样大小);
 89                3,WRAP_CONTENT,即包裹住组件就好。*/
 90             GridView.LayoutParams p = new GridView.LayoutParams(
 91                     85,85);
 92             imageview.setLayoutParams(p);
 93             
 94             // 设置显示比例类型
 95             imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
 96         }
 97         
 98         //已经创建过view
 99         else
100         {
101             imageview = (ImageView)convertView;
102         }
103             imageview.setImageResource(mImageIds[position]);
104         return imageview;
105     }
106 
107 }

Acitvity代码:

 1 package com.example.gridviewdemoba;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.view.Menu;
 6 import android.view.View;
 7 import android.widget.AdapterView;
 8 import android.widget.AdapterView.OnItemClickListener;
 9 import android.widget.GridView;
10 import android.widget.Toast;
11 
12 /**
13  * @author sjh
14  *这是一个GridView的Demo,用到了BaseAdpter
15  */
16 public class GridViewDemoBA extends Activity {
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_grid_view_demo_d);
22          
23         //取得GridView对象
24         GridView gridview = (GridView) findViewById(R.id.gv_gridviewdemoba_mygv);
25         
26         //添加元素给gridview
27         ImageAdpter adpter = new ImageAdpter(this);
28         gridview.setAdapter(adpter);
29         
30         //设置Gallery的背景
31         gridview.setBackgroundResource(R.drawable.bg);
32         gridview.setOnItemClickListener(new OnItemClickListener() {
33 
34             @Override
35             public void onItemClick(AdapterView<?> parent, View v, int position,
36                     long id) {
37                 // TODO Auto-generated method stub
38                 Toast.makeText(GridViewDemoBA.this, "你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT).show();
39             }
40         });
41     }
42 
43     
44 
45 }
原文地址:https://www.cnblogs.com/merryjd/p/2851332.html