要想实现自定义gridview效果,有下边几个步骤:

1、定义grivew中的item的xml文件

假如item需要显示一个图片,图片下边显示文字:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp"
android:orientation="vertical"
> <Button
android:id="@+id/button_gridview_item"
android:layout_width="130dp"
android:layout_height="130dp"
android:text="" android:focusable="false"
android:clickable="false" android:textColor="#ffffff"
android:textSize="36sp"
/> <TextView
android:id="@+id/tv_login_staff_name"
android:layout_width="130dp"
android:layout_height="30dp"
android:text="button" android:focusable="false"
android:clickable="false"
android:textSize="15sp"
android:gravity="center"
android:textColor="#ffffff"
/> </LinearLayout>

2、自定义adapter

我是extends了baseAdapter,然后在getView时,将图片从网络加载到button上。

注意点:这些getItem、getItemId、getCount等继承过来的方法,一定要记得再次赋值

 public class login_gridview_adapter extends BaseAdapter{

     public static int selectPic = -1;
private Context context = null;
private List<login_staff> list = null;
private String tag = "adapter"; public login_gridview_adapter(Context ctxt,List<login_staff> ls)
{
for(int i=0;i<ls.size();i++)
{
CommonUtils.LogWuwei(tag,"in adaper "+ls.get(i).name );
} context = ctxt;
list = ls;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} public void setNotifyDataChange(int id) {
selectPic = id;
super.notifyDataSetChanged();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub CommonUtils.LogWuwei(tag, "position is "+position); LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View grid = inflater.inflate(R.layout.grid_item, null); if (convertView == null) {
grid = new View(context);
grid = inflater.inflate(R.layout.grid_item, null);
Button button = (Button) grid.findViewById(R.id.button_gridview_item);
String imgUrl = list.get(position).head;
login.bitmapUtils.display(button, imgUrl, login.bigPicDisplayConfig, null); TextView tv = (TextView) grid.findViewById(R.id.tv_login_staff_name);
tv.setText(list.get(position).name); } else {
grid = (View) convertView;
} if(selectPic == position)
{
String imgUrl = list.get(position).head;
//convertView.setAnimation(new AnimationUtils().loadAnimation(login.ctxt,R.anim.unzoom_in));
Message msg = new Message();
msg.what = login.REMOVE_GRIDVIEWS;
login.handler.sendMessage(msg);
login.bitmapUtils.display(login.gridviewStaffList, imgUrl, login.bigPicDisplayConfig, null);
}
return grid;
} }

3、activity中设置gridview的适配器为我们上一步自定义的adapter

 gridviewStaffListAdapter = new login_gridview_adapter(ctxt, listLoginStaff);

 gridviewStaffList.setAdapter(gridviewStaffListAdapter);
gridviewStaffList.setSelector(new ColorDrawable(Color.TRANSPARENT));
gridviewStaffList.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
MsgUtils.SendSingleMsg(new HandlerUtils(ctxt).handler, listLoginStaff.get(position).name,HandlerUtils.SHOW_TOAST);
gridviewStaffListAdapter.setNotifyDataChange(position);
positionStaffId = listLoginStaff.get(position).staff_id;
}
});

4、总结

要想改变gridview中数据,必须更新适配器(也就是设置过的adapter);那么要想设置适配器,必须设置适配器定义时传入的list,list经过add、remove等操作后,要想让

gridview跟着改变,需要手动更新一下,比如说这样:

gridviewStaffListAdapter.notifyDataSetChanged();

30、自定义gridview的更多相关文章

  1. android 自定义gridview(导航)

    最近又重新做回安卓,做了个小项目.下绝心使用android studio,通过这一回实战,终于用上了.综合了前人的经验,搞了个自己满意的导航界面,用的是gridview. 代码: package co ...

  2. 自定义GridView实现分割线解析

    前两天在些项目的时候碰到常用的GridView要实现一些分割线,之前就是用本方法利用listView和Item的背景颜色的不同线显示分割线.这是最low的一种做法.于是我就简单的写了一个自定义的 Gr ...

  3. yii2-basic后台管理功能开发之三:自定义GridView列显示

    在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...

  4. Android开发:自定义GridView/ListView数据源

    http://mobile.51cto.com/android-259861.htm 在开发中,我们常常会遇到比较复杂的GridView/ListView的布局,重新实现BaseAdapter不但能帮 ...

  5. 一个可以拖动的自定义Gridview代码

    这个可以拖动的gridview继承于gridview,所以,用法和gridview一样, 代码如下: public class DragGridView extends GridView { priv ...

  6. GridView布局,自定义适配器,水平滚动

    添加GridItem布局XML文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  7. GridView自定义分页样式(上一页,下一页,到第几页)

    今天要为网站做一个文章列表,发现GridView的分页样式很难看,于是结合网上的例子,自己做了一个.不是很美观,不过还是很实用的,先看下效果吧,如图(1). 图(1)GridView分页效果 自定义G ...

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

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

  9. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

随机推荐

  1. WebView全面学习(一)--常用类和方法

    WebView全面学习(一)--常用类和方法 WebView本质上是一个View,他基于webkit引擎来展示web页面 在Android不同的版本webkit内核有所区别,从Android版本上看, ...

  2. js字符串、数组、时间、日期对象

    js对字符串.数组.日期的操作是在以后项目中频繁使用的操作,所以呢....所以大家看着办,其实并不难哈,就是有点无聊,我承认这是我百度的,哈哈哈哈 <!DOCTYPE html><h ...

  3. HDU 3709 Balanced Number (数位DP)

    题意: 找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数. 思路: 一开始以为需要枚举位数,枚举前缀和,枚举后缀和,一旦枚举起来就会M ...

  4. 方法的重写【java语言】

    1.父类 package com.wyq.study; public class Father{//书写类 //书写属性 private String name; private int age; / ...

  5. 斐讯k2p 月光银 硬件版本A2-软件版本22.7.8.5 刷官改系统

    Mark https://huabuyu.net/斐讯k2p%20月光银%20硬件版本A2-软件版本22.7.8.5%20刷官改系统.html 详细资源推荐:恩山论坛 https://www.righ ...

  6. C++中malloc / free 和 new / delete 的区别?

    1.malloc/free 是C++/C语言的标准库函数,New/delete是C++运算符:都是用于申请动态内存和释放内存. 2.new做两件事:分配内存和调用类的构造函数,delete是:调用类的 ...

  7. ctDNA|endosymbiosis

    5.10叶绿体基因组编码多种蛋白质和RNA 叶绿体和线粒体的共同点:叶绿体和线粒体的大小,功能(编码区)大体一致,但叶绿体拥有更多基因,所以在编码tRNA时,也有内含子作为被剪切片段. 因为在原核生物 ...

  8. Hibernate异常:identifier of an instance of 错误

    今天写项目时,在使用hibernate封装的插入方法时,由于需要同时保存多个数据,导致出现identifier of an instance of 如下代码 :(由于最大最小分数不同所以需要插入两条数 ...

  9. c++基本配置属性页

    怎么调试一个项目. 需要配置好环境. 在一个release版本的环境中,调试要用release-debug版本,一般不用debug版本. 配置类型一般不变.

  10. python入门:while循环里面True和False的作用,真和假

    #!/usr/bin/env python # -*- coding:utf-8 -*- #while循环里面True和False的作用,真和假 """ n1等于真(Tr ...