zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    [React Hooks长文总结系列三]为所欲为,制作“穷人版”的redux
    [React Hooks长文总结系列二]渐入佳境,性能调优与自定义钩子
    [React Hooks长文总结系列一]初出茅庐,状态与副作用
    EsModule VS CommonJS
    [清代八股文]Promise如何实现串行执行
    React Fiber基本工作原理
    深入剖析setState同步异步机制
    破译《碟中谍》经典画面,解密指纹验证+刷脸!
    如何测试重签名的应用功能是否正常
    图像处理之滤镜、图文排版的开发详解,从入门到起飞
  • 原文地址:https://www.cnblogs.com/merryjd/p/2851332.html
Copyright © 2011-2022 走看看