要想实现自定义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. 如何解决Eureka Server不踢出已关停的节点的问题?

    如何解决Eureka Server不踢出已关停的节点的问题? eureka端: eureka.server.enable-self-preservation                       ...

  2. vuejs 学习旅程一

    来上海快一年了,一直在东钿金融工作着,这一年来主要负责公司前期的房产评估微信平台,公司IT部也是刚刚成立,成立IT部门不仅仅只是维护房产评估微信,而是要做一个互金理财平台.于是我一年来的主要工作是负责 ...

  3. ArcSDE 10.1 For Windows 创建空间数据库与常见错误_SQL Server

    本文是2013年时候参加ESRI竞赛,创建ArcSDE 10.1 for SQL Server时候出问题了,因此写了该文档. 由于一直忙于学习,忘了发布.今天一师弟也遇到同样问题,为此我觉得可能有不少 ...

  4. python2含有中文路径报错解决办法[\xe4\xbf\xa1\xe6\x81\xaf]

    如图所示 百度的解决办法大多数是针对python3版本的,在脚本开头加# -*- coding:utf-8 -*-,但是python2版本加了编码格式,还是报错,具体解决办法是:path =unico ...

  5. WinForm 公共控件和属性

    Button  按钮 布局 AutoSize 内容超出部分是否扩展到适应尺寸大小 Location  位置坐标 Size   控件大小 行为 Enabled   控件是否启用 visible   控件 ...

  6. redis的一些问题总结,转载自infoq

    Redis是时下比较流行的Nosql技术.在优酷我们使用Redis Cluster构建了一套内存存储系统,项目代号蓝鲸.到目前为止集群有700+节点,即将达到作者推荐的最大集群规模1000节点.集群从 ...

  7. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] A A Problem about Polyline(数学)

    题目中给出的函数具有周期性,总可以移动到第一个周期内,当然,a<b则无解. 假设移动后在上升的那段,则有a-2*x*n=b,注意限制条件x≥b,n是整数,则n≤(a-b)/(2*b).满足条件的 ...

  8. 2015 ACM/ICPC Asia Regional Changchun Online Pro 1005 Travel (Krsukal变形)

    Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  9. kubernetes-平台日志收集(ELK)

    使用ELK Stack收集Kubernetes平台中日志与可视化 K8S系统的组件日志 K8S Cluster里面部署的应用程序日志 日志系统: ELK安装 安装jdk [root@localhost ...

  10. 爬虫遇到HTTP Error 403的问题

    # coding=gbk from bs4 import BeautifulSoup import requests import urllib x = 1 y = 1 def crawl(url): ...