gridView 是android一个控件主要是显示列似与九宫格这样的效果。废话不多说直接上代码。

首先是需要一个适配器来确定每一个里面的布局,在里面我自定义了一个点击事件,当点击图片布局的时候触发,实现在activity中去实现他,当然也可以使用OnItemClickLisntner来直接使用每一个item的点击。

GridViewAdapter.java
import android.content.Context;
import android.util.Log;
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; import java.util.List; /**
* Created by zd on 2018/12/29.
*/
public class GridViewAdapter extends BaseAdapter { private List<String> data;//数据 private Context context;//上下文 private OnImgClickListener itemClickListener; public GridViewAdapter(List<String> data, Context context) {
this.data = data;
this.context = context;
} @Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
return data.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position,final View convertView, ViewGroup parent) {
View view;
ViewHolder viewHolder;
if (convertView == null) {
//加载子布局
view = LayoutInflater.from(context).inflate(R.layout.item_grid, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) view.findViewById(R.id.img);
viewHolder.textView = (TextView) view.findViewById(R.id.txt);
viewHolder.ll = (LinearLayout) view.findViewById(R.id.ll);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
String plan = data.get(position); if (plan != null) {
viewHolder.imageView.setImageResource(R.mipmap.ic_launcher);
viewHolder.textView.setText(plan); viewHolder.ll.setTag(position);
viewHolder.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout btn = (LinearLayout) v;
int pos = (Integer) btn.getTag();
Log.e("sys"," position2 :" + pos);
Log.e("sys"," data2 :" + data.get(pos).toString());
if(itemClickListener!=null){
itemClickListener.onImgClick((Integer) v.getTag());
}
}
});
}
return view;
} private class ViewHolder {
ImageView imageView;
TextView textView;
LinearLayout ll;
} //自定义点击接口
public interface OnImgClickListener {
void onImgClick(int tag);
} //接口设置
public void setImgClickListener(OnImgClickListener itemClickListener){
this.itemClickListener = itemClickListener;
}
}

  

item_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="vertical"> <LinearLayout
android:id="@+id/ll"
android:gravity="center"
android:orientation="vertical"
android:layout_width="80dp"
android:layout_height="wrap_content"> <ImageView
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="100dp"/> <TextView
android:maxLines="1"
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </LinearLayout>
</LinearLayout>

 

MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.GridView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { GridViewAdapter gridViewAdapter;
List<String> data; GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); data = new ArrayList<>();
data.add("A1");
data.add("A2");
data.add("A3");
data.add("A4");
data.add("A5");
data.add("B1");
data.add("B2");
data.add("B3");
data.add("B4");
data.add("B5");
for (int i=0;i<30;i++){
data.add("C"+i);
}
gridView = (GridView) findViewById(R.id.girdView); //实例化适配器
gridViewAdapter = new GridViewAdapter(data, this);
gridViewAdapter.setImgClickListener(new GridViewAdapter.OnImgClickListener() {
@Override
public void onImgClick(int tag) {
//
Log.e("sys","tag"+tag);
Log.e("sys"," data2 :" + data.get(tag).toString());
}
});
//设置适配器
gridView.setAdapter(gridViewAdapter); }
}

  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.kkrs.grid.MainActivity"> <GridView
android:columnWidth="100dp"
android:numColumns="4"
android:id="@+id/girdView"
android:layout_width="match_parent"
android:layout_height="match_parent"></GridView> </LinearLayout>

  android:numColumns="4" 表示一行有多少个

GridView 的简单应用的更多相关文章

  1. Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)

    最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很 ...

  2. GridView的简单使用

    测试代码: activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/a ...

  3. Android零基础入门第45节:GridView简单使用

    原文:Android零基础入门第45节:GridView简单使用 前面一共用了8期来学习ListView列表的相关操作,其实学习的ListView的知识完全适用于AdapterView的其他子类,如G ...

  4. 初始ASP.NET数据控件GridView

    使用GridView控件绑定数据源 GridView控件个人认为就是数据表格控件,它以表格的形式显示数据源中的数据.每列表示一个字段,每行表示一条记录.     GridView控件支持在页面有一下功 ...

  5. GridView内容详解(转载)

    GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性 ...

  6. 【C#公共帮助类】 WebHelper帮助类

    如果你是一个新手,如果你刚接触MVC,如果你跟着置顶的那个项目,我们肯定会用到这里面的几个帮助类 它们都在Common类库下,大家一定要记住要点:取其精华去其糟粕,切勿拿来主义~ Applicatio ...

  7. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  8. qml基础学习 模型视图(一)

    一.理解qml模型和视图 qt的发展是迅速的,虽然在每一个release版本中或多或少都有bug,但是作为一个庞大的gui库,no,应该说是一个开发框架开说,qt已经算是做的相当好.qml部分是qt4 ...

  9. 精《记叙“tom”4年的软件开发之旅》

    1.引言 本篇文章是记叙tom四年的软件开发从业经历,虽然他资历不长,况且本身也是个菜鸟,但他也曾有过荣誉.迷茫.困惑与选择,在这里他希望通过自己所经历过的事情分享给大家,给那些真正热爱软件开发的同学 ...

随机推荐

  1. 设计模式之策略模式(Strategy Pattern)

    模板方法是通过继承实现的,在父类中定义出算法的骨架,将不同点在子类中实现.而策略模式是通过接口实现的,策略中定义了完整的算法.它们有点像啊-- 策略模式的定义 策略模式(Strategy Patter ...

  2. 战争热诚的python全栈开发之路

    从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...

  3. 并发库应用之六 & 有条件阻塞Condition应用

    Condition的功能类似在传统线程技术中的 Object.wait() 和 Object.natify() 的功能,传统线程技术实现的互斥只能一个线程单独干,不能说这个线程干完了通知另一个线程来干 ...

  4. Node.js中的异步I/O是如何进行的?

    Node.js的异步I/O通过事件循环的方式实现.其中异步I/O又分磁盘I/O和网络I/O.在磁盘I/O的调用中,当发起异步调用后,会将异步操作送进libuv提供的队列中,然后返回.当磁盘I/O执行完 ...

  5. Shiro入门之二 --------基于注解方式的权限控制与Ehcache缓存

    一  基于注解方式的权限控制 首先, 在spring配置文件applicationContext.xml中配置自动代理和切面 <!-- 8配置自动代理 -->    <bean cl ...

  6. MySQL事务原理&实战【官方精译】

    事务隔离级别 事务隔离是数据库处理的基础之一.隔离是I中的首字母 ACID ; 隔离级别是在多个事务同时进行更改和执行查询时,对结果的性能和可靠性,一致性和可重复性之间的平衡进行微调的设置. Inno ...

  7. 写完批处理脚本,再写个Gradle脚本,解放双手

    前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradl ...

  8. 解决error while loading shared libraries的通用方案

    1. 首先 find / -name libevent-1.4.so.2 找到缺少的链接文件到底在那儿. 2. LD_DEBUG=libs LD_DEBUG=libs /usr/local/bin/f ...

  9. Java Script 读书笔记 (三) 函数

    1. 函数作用域 在函数内部定义的变量,外部无法读取,称为"局部变量"(local variable). 变量v在函数内部定义,所以是一个局部变量,函数之外就无法读取. 函数内部定 ...

  10. 解锁 vmware esxi 6.7 并安装 mac os 10.13

    1.安装 esxi 6.7 2.下载 unlocker 2.1.1.zip 3.上传 unlocker 2.1.1.zip esxi的磁盘中 4.开启esxi的ssh登录 5.使用 ssh 登录 es ...