zoukankan      html  css  js  c++  java
  • GridView的应用

    GridView是网格列表,它和ListView很类似,都是View的子类。因此操作它的方法和操作ListView的方法类似。

    步骤:
     1.将数据结构存储数据Data
     2.用适配器关联数据Data和View组件
     3.为GridView设置适配器 (setAdapter())

    step1:新建android工程,命名为GridViewTest。

    step2:设置布局文件main.xml和main1.xml

    main.xml

    main.xml
     1 <?xml version="1.0" encoding="utf-8"?>  
     2 <GridView xmlns:android="http://schemas.android.com/apk/res/android"   
     3     android:id="@+id/gridview01"  
     4     android:layout_width="fill_parent"   
     5     android:layout_height="fill_parent"  
     6     android:numColumns="auto_fit"  
     7     android:verticalSpacing="10dp"  
     8     android:horizontalSpacing="10dp"  
     9     android:columnWidth="90dp"  
    10     android:stretchMode="columnWidth"  
    11     android:gravity="center"  
    12 />

    main1.xml用于设计GridView的item

    main1.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent"
     5     android:orientation="vertical" >
     6 
     7     <ImageView 
     8         android:id="@+id/imageview01"
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"/>
    11         
    12     <TextView
    13         android:id="@+id/textview01"
    14         android:layout_width="fill_parent"
    15         android:layout_height="wrap_content"/>
    16 
    17 </LinearLayout>

    step3:设计主类GridViewTest.java(用两个主类来分别展示使用SimpleAdapter、BaseAdapter)

    1.使用SimpleAdapter

    GridViewTest
     1 package com.cb.gridview;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 
     6 import android.app.Activity;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.widget.AdapterView;
    10 import android.widget.AdapterView.OnItemClickListener;
    11 import android.widget.GridView;
    12 import android.widget.SimpleAdapter;
    13 
    14 /*
    15  * GridView和ListView相同,都是GridView/ListView组件  和  数据Data  和  适配器Adapter
    16  * 步骤:
    17  * 1.选择要存储的数据Data,用一维或二维动态数组存储
    18  * 2.用适配器关联数据Data和View组件,
    19  * 3.为GridView设置适配器 (setAdapter())
    20  */
    21 
    22 public class GridViewTest extends Activity {
    23     private GridView mGridView;
    24     private int[] images = new int[] { R.drawable.nash1, R.drawable.nash2,
    25             R.drawable.nash3, R.drawable.nash4, R.drawable.nash5,
    26             R.drawable.nash1, R.drawable.nash2, R.drawable.nash3,
    27             R.drawable.nash4};
    28 
    29     @Override
    30     public void onCreate(Bundle savedInstanceState) {
    31         super.onCreate(savedInstanceState);
    32         setContentView(R.layout.main);
    33 
    34         mGridView = (GridView) findViewById(R.id.gridview01);
    35 
    36         // 创建动态数字,存储Data
    37         ArrayList<HashMap<String, Object>> listitems = new ArrayList<HashMap<String, Object>>();
    38 
    39         for (int i = 0; i < 9; i++) {
    40             HashMap<String, Object> item = new HashMap<String, Object>();
    41             item.put("ItemImages", images[i]);
    42             item.put("ItemTexts", "第" + (i + 1) + "个");
    43 
    44             listitems.add(item);
    45         }
    46 
    47         /**
    48          * Constructor
    49          * 
    50          * @param context
    51          *            The context where the View associated with this
    52          *            SimpleAdapter is running
    53          * @param data
    54          *            A List of Maps. Each entry in the List corresponds to one
    55          *            row in the list. The Maps contain the data for each row,
    56          *            and should include all the entries specified in "from"
    57          * @param resource
    58          *            Resource identifier of a view layout that defines the
    59          *            views for this list item. The layout file should include
    60          *            at least those named views defined in "to"
    61          * @param from
    62          *            A list of column names that will be added to the Map
    63          *            associated with each item.
    64          * @param to
    65          *            The views that should display column in the "from"
    66          *            parameter. These should all be TextViews. The first N
    67          *            views in this list are given the values of the first N
    68          *            columns in the from parameter.
    69          */
    70         // 使用SimpleAdapter适配器 建立数据Data和main1.xml中组件的关联
    71         SimpleAdapter adapter = new SimpleAdapter(GridViewTest.this, listitems, // Data数据
    72                 R.layout.main1, // 布局文件
    73                 new String[] { "ItemImages", "ItemTexts" }, new int[] {
    74                         R.id.imageview01, R.id.textview01 });
    75 
    76         mGridView.setAdapter(adapter); // 为GridView设置适配器
    77 
    78         // 处理选中事件
    79         mGridView.setOnItemClickListener(new OnItemClickListener() {
    80 
    81             @Override
    82             public void onItemClick(AdapterView<?> parent,// The AdapterView
    83                                                             // where the click
    84                                                             // happened
    85                     View view, // The view within the AdapterView that was
    86                                 // clicked
    87                     int position, // The position of the view in the adapter
    88                     long id // The row id of the item that was clicked
    89             ) {
    90                 // TODO Auto-generated method stub
    91                 HashMap<String, Object> items = (HashMap<String, Object>) parent
    92                         .getItemAtPosition(position);
    93 
    94                 // 显示选中项的ItemText信息
    95                 setTitle((String) items.get("ItemTexts"));
    96             }
    97         });
    98     }
    99 }

    2.使用BaseAdapter

    GridViewTest2
     1 package com.cb.gridview;
     2 
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.os.Bundle;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 import android.widget.BaseAdapter;
     9 import android.widget.GridView;
    10 import android.widget.ImageView;
    11 
    12 /*
    13  * GridView和ListView相同,都是GridView/ListView组件  和  数据Data  和  适配器Adapter
    14  * 步骤:
    15  * 1.将数据结构存储数据Data
    16  * 2.用适配器关联数据Data和View组件
    17  * 3.为GridView设置适配器 (setAdapter())
    18  */
    19 
    20 public class GridViewTest2 extends Activity {
    21     private GridView mGridView;
    22 
    23     @Override
    24     public void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         setContentView(R.layout.main);
    27 
    28         mGridView = (GridView) findViewById(R.id.gridview01);
    29 
    30         ImageAdapter adapter2 = new ImageAdapter(this);//创建适配器(继承自BaseAdapter)
    31         mGridView.setAdapter(adapter2);
    32 
    33     }
    34 }
    35 
    36 // 定义ImageAdapter类,继承于 BaseAdapter
    37 class ImageAdapter extends BaseAdapter {
    38 
    39     private Context mContext;
    40     private int[] images = { R.drawable.nash1, R.drawable.nash2,
    41             R.drawable.nash3, R.drawable.nash4, R.drawable.nash5,
    42             R.drawable.nash1, R.drawable.nash2, R.drawable.nash3,
    43             R.drawable.nash4, R.drawable.nash5, R.drawable.nash1,
    44             R.drawable.nash2, R.drawable.nash3, R.drawable.nash4,
    45             R.drawable.nash5 };
    46 
    47     public ImageAdapter(Context c) {
    48         mContext = c;
    49     }
    50 
    51     @Override
    52     public int getCount() {
    53         // TODO Auto-generated method stub
    54         return images.length;
    55     }
    56 
    57     @Override
    58     public Object getItem(int position) {
    59         // TODO Auto-generated method stub
    60         return position;
    61     }
    62 
    63     @Override
    64     public long getItemId(int position) {
    65         // TODO Auto-generated method stub
    66         return position;
    67     }
    68 
    69     @Override
    70     public View getView(int position, View convertView, ViewGroup parent) {
    71         // TODO Auto-generated method stub
    72         ImageView mImageView;
    73         if (convertView == null) {
    74             // 给ImageView设置资源
    75             mImageView = new ImageView(mContext);
    76             // 设置布局 图片120×120显示
    77             mImageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    78             // 设置显示比例类型
    79             mImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
    80         } else {
    81             mImageView = (ImageView) convertView;
    82         }
    83         mImageView.setImageResource(images[position]);
    84 
    85         return mImageView;
    86     }
    87 
    88 }

    step4:执行结果如下

    1.使用SimpleAdapter效果图,在标题栏显示被单击图片的文字

    2.使用BaseAdapter效果图

  • 相关阅读:
    leetcode 141 环形链表
    [转载]Tensorflow中reduction_indices 的用法
    SIFT特征原理与理解
    numpy切片和布尔型索引
    IPython的使用
    [文献阅读]基于卷积神经网络的高光谱图像深度特征提取与分类
    验证码校验
    防止表单重复提交
    MyBatis 一对一,一对多,多对多
    MySQL基础内容
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2472754.html
Copyright © 2011-2022 走看看