30、自定义gridview
要想实现自定义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的更多相关文章
- android 自定义gridview(导航)
最近又重新做回安卓,做了个小项目.下绝心使用android studio,通过这一回实战,终于用上了.综合了前人的经验,搞了个自己满意的导航界面,用的是gridview. 代码: package co ...
- 自定义GridView实现分割线解析
前两天在些项目的时候碰到常用的GridView要实现一些分割线,之前就是用本方法利用listView和Item的背景颜色的不同线显示分割线.这是最low的一种做法.于是我就简单的写了一个自定义的 Gr ...
- yii2-basic后台管理功能开发之三:自定义GridView列显示
在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...
- Android开发:自定义GridView/ListView数据源
http://mobile.51cto.com/android-259861.htm 在开发中,我们常常会遇到比较复杂的GridView/ListView的布局,重新实现BaseAdapter不但能帮 ...
- 一个可以拖动的自定义Gridview代码
这个可以拖动的gridview继承于gridview,所以,用法和gridview一样, 代码如下: public class DragGridView extends GridView { priv ...
- GridView布局,自定义适配器,水平滚动
添加GridItem布局XML文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- GridView自定义分页样式(上一页,下一页,到第几页)
今天要为网站做一个文章列表,发现GridView的分页样式很难看,于是结合网上的例子,自己做了一个.不是很美观,不过还是很实用的,先看下效果吧,如图(1). 图(1)GridView分页效果 自定义G ...
- 初始ASP.NET数据控件GridView
使用GridView控件绑定数据源 GridView控件个人认为就是数据表格控件,它以表格的形式显示数据源中的数据.每列表示一个字段,每行表示一条记录. GridView控件支持在页面有一下功 ...
- ScrollView嵌套ListView,GridView数据加载不全问题的解决
我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...
随机推荐
- [转载]SAP预装服务器全编译
一.说明 SAP系统初始安装后,每当事物码第一次运行时,GUI的左下角会显示编译的状态(如图 1所示),费时很多尤其是对于一些业务内容很丰富的事物码如ME21N.VA01. 图 1 编译状态 产生编译 ...
- Elasticsearch-分片原理1
Elasticsearch版本:6.0 Elasticsearch基于Lucene,采用倒排索引写入磁盘,Lucene引入了按段搜索的概念,来动态更新索引. 一个Lucene索引包含一个提交点和三个短 ...
- MVC4学习之官方教程中迁移版本库报错
因工作需要,学习MVC4,但是微软官方教程中迁移版本库步骤在本地测试报错 官方教程地址:http://www.asp.net/mvc/overview/older-versions/getting-s ...
- MySQL如何找出未提交事务信息
前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...
- .NET easyUI tree树状结构
简单的制作后台制作写一个json(string类型)格式 public partial class goodstype_type : System.Web.UI.Page { public strin ...
- Windows7(x86) xampp php5.5 imagick install
I hate windows. 1. 下载安装 ImageMagick, 选择合适您电脑的版本,我下载的是: ImageMagick-6.8.9-1-Q16-x86-dll.exe http://ww ...
- servlet forword服务器端跳转
web.xml中配置servlet的映射和访问路径 <?xml version="1.0" encoding="UTF-8"?><web-ap ...
- 为什么我的C4C Service Request没办法Release到ERP?
问题 UI上发现找不到Release to ERP的按钮: 但是在UI Designer里是能看到这个按钮的.检查其Visible的属性,绑到了一个Calculated Rule上面: 发现其显示在r ...
- SAP数据中心概述
文章目录 SAP数据中心内部的组成部分 SAP数据中心的安全性 SAP数据中心的绿色运营 SAP云平台编程环境 Jerry的前一篇文章企业数字化转型与SAP云平台介绍了SAP云平台在企业数字化转型中的 ...
- UVA208 Firetruck 消防车(并查集,dfs)
要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可 #include<bits/stdc++.h> using namespace std; ; int p[m ...