GridView 使用详解
极力推荐文章:欢迎收藏
Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- GridView 主要用法
 - GridView 使用案例
 
GridView 跟ListView 很类似,Listview 主要以列表形式显示数据,GridView 则是以网格形式显示数据,掌握ListView 使用方法后,会很轻松的掌握GridView的使用方法。
GridView 简介
继承关系如下
java.lang.Object
   ↳	android.view.View
 	   ↳	android.view.ViewGroup
 	 	   ↳	android.widget.AdapterView<android.widget.ListAdapter>
 	 	 	   ↳	android.widget.AbsListView
 	 	 	 	   ↳	android.widget.GridView
1. GridView 主要使用方法
GridView 主要通过使用自定义BaseAdapter 来适配数据,进而显示到GridView中。主要使用方法如下:
1. 准备数据源
        list = new ArrayList<Map<String, Object>>();
2. 为数据源设置适配器
        MyAdapter adapter = new MyAdapter();
3. 将适配过后点数据显示在GridView 上
        gridView.setAdapter(adapter);
2. GridView 使用Demo
- 实现效果如下
 

- 实现代码如下
 
	private GridView gridView;
	private List<Map<String, Object>> list;
	private int images[] = { R.drawable.gril, R.drawable.ic_launcher,
			R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril,
			R.drawable.ic_launcher, R.drawable.gril, R.drawable.ic_launcher,
			R.drawable.gril };
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_grid_view_method);
		gridView = (GridView) findViewById(R.id.gv);
		// 1. 准备数据源
		list = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < images.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("image", images[i]);
			map.put("text", "图片" + i);
			list.add(map);
		}
		// 2.为数据源设置适配器
		MyAdapter adapter = new MyAdapter();
		// 3.将适配过后点数据显示在GridView 上
		gridView.setAdapter(adapter);
		// item点击事件处理
		gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//
				Toast.makeText(GridViewMethod.this,
						list.get(position).get("text").toString(),
						Toast.LENGTH_SHORT).show();
			}
		});
	}
	class MyAdapter extends BaseAdapter {
		@Override
		public int getCount() {
			return list.size();
		}
		@Override
		public Object getItem(int position) {
			return list.get(position);
		}
		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				// 第一次加载创建View,其余复用 View
				convertView = LayoutInflater.from(GridViewMethod.this).inflate(
						R.layout.gridview_item_img_tv, null);
				holder = new ViewHolder();
				holder.imageView = (ImageView) convertView
						.findViewById(R.id.grid_img);
				holder.textView = (TextView) convertView
						.findViewById(R.id.grid_tv);
				// 打标签
				convertView.setTag(holder);
			} else {
				// 从标签中获取数据
				holder = (ViewHolder) convertView.getTag();
			}
			// 根据key值设置不同数据内容
			holder.imageView.setImageResource((Integer) list.get(position).get(
					"image"));
			holder.textView.setText((String) list.get(position).get("text"));
			return convertView;
		}
	}
	class ViewHolder {
		ImageView imageView;
		TextView textView;
	}
- GridView 布局如下
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.android.program.programandroid.ListView.GridViewMethod">
    <GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:verticalSpacing="10dp" />
</LinearLayout>
- item 布局 如下
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/grid_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:gravity="center_horizontal"
        android:src="@drawable/ic_launcher" />
    <TextView
        android:id="@+id/grid_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textColor="@android:color/darker_gray"
        android:text="test"
        android:gravity="center_horizontal"
        android:textSize="25sp" />
</LinearLayout>
至此GridView 的基本使用方法结束。
如果不是太明白,可以查看上篇文章
ListView  使用详解
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

GridView 使用详解的更多相关文章
- Asp.net中GridView使用详解(很全,很经典 转来的)
		
Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l ...
 - Asp.net中GridView使用详解(引)【转】
		
Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...
 - ListView嵌套GridView使用详解及注意事项
		
ListView嵌套GridView即ListView的每个Item中都包含一个GridView:需要注意的是由于ListView和GridView都是可滑动的控件. 所以需要自定义GridView, ...
 - GridView内容详解(转载)
		
GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性 ...
 - Asp.net中GridView使用详解(很全,很经典)
		
http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...
 - flutter系列之:flutter中常用的GridView layout详解
		
目录 简介 GridView详解 GridView的构造函数 GridView的使用 总结 简介 GridView是一个网格化的布局,如果在填充的过程中子组件超出了展示的范围的时候,那么GridVie ...
 - Asp.net中GridView使用详解(引)
		
GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠标移到Gr ...
 - GridView用法详解
		
前台页面: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile=&qu ...
 - 开源项目MultiChoiceAdapter详解(六)——GridView和MultiChoiceBaseAdapter配合使用
		
这篇其实没啥重要的,主要就算是个总结吧. 一.布局文件 这里实现的是类似于上图的多图选择的效果.关键在于item布局文件的写法.这也就是这个框架奇葩的一点,莫名其妙的要在一个自定义控件里面再放一个自定 ...
 
随机推荐
- Appium+python自动化(十三)-  与Capability完美懈垢之解读(超详解)
			
简介 Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中.这部分就是对Capab ...
 - 17 | 精益求精:聊聊提高GUI测试稳定性的关键技术
 - C#  位运算及实例计算
			
前言: 平时在实际工作中很少用到这个,虽然都是一些比较基础的东西,但一旦遇到了,又不知所云.刚好最近接触了一些相关这方面的项目,所以也算是对 这些内容重新温习实践了一遍.所以这篇不仅作为个人备忘,也分 ...
 - LinkedList源码分析:JDK源码分析系列
			
如果本文中有不正确的地方请指出由于没有留言可以在公众号添加我的好友共同讨论. 1.介绍 LinkedList 是线程不安全的,允许元素为null的双向链表. 2.继承结构 我们来看一下LinkedLi ...
 - Unix及Linux编辑器vi/vim基本使用方法
 - QRowTable表格控件(二)-红涨绿跌
			
目录 一.开心一刻 二.概述 三.效果展示 四.任务需求 五.指定列排序 六.排序 七.列对其方式 八.相关文章 原文链接:QRowTable表格控件(二)-红涨绿跌 一.开心一刻 一天,五娃和六娃去 ...
 - 简易数据分析 06 | 如何导入别人已经写好的 Web Scraper 爬虫
			
这是简易数据分析系列的第 6 篇文章. 上两期我们学习了如何通过 Web Scraper 批量抓取豆瓣电影 TOP250 的数据,内容都太干了,今天我们说些轻松的,讲讲 Web Scraper 如何导 ...
 - 【基础算法-模拟-例题-金币】-C++
			
原题链接:P2669 金币 这道题目完全是一道模拟题,只要按照题目中的加金币的算法和sum累加就可以很轻易得出最终答案. 说一下有一些点需要注意: 1.用i来计每天发的金币数,n来计已经拿了金币的天数 ...
 - NetCore 依赖注入之服务之间的依赖关系
			
简单介绍,直接官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspn ...
 - getlasterror() 输出错误信息,
			
得自http://bbs.csdn.net/topics/390416234 LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE ...