BaseAdapter自定义适配器
listview = (ListView) findViewById(R.id.listview); imageview = (ImageView) findViewById(R.id.imageview); //填充数据 for(int i = 0; i < 30; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "第" +i+"个人"); map.put("age", i); list.add(map); } // 当listview中没有数据的时候显示空白的图片 listview.setEmptyView(imageview); // 创建MyAdapter对象(这是不是用系统定义的ArrayAdapter) MyAdapter adapter = new MyAdapter(); // 显示adapter对象到listview上 listview.setAdapter(adapter);
// 定制自己的Adapter 继承BaseAdapter class MyAdapter extends BaseAdapter { // 该Adapter对应的数据列表中有多少项目 @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; } // 根据下标生成(产生)listview中一行对应的视图 // getView()不会立即把所有数据项全部加载 只加载用户可见的数据项 // 当上面或下面的数据项因为上拉或下拉而退出屏幕的时候 系统回收该view // 重新往回拉的时候 又再次调用getView()进行加载 // 合理的使用convertView --- 系统已经回收的view 可以拿来重新使用 // 如果刚开始时 没有已经回收的view 则convertView==null // 正确的做法是 根据convertView是否为空来进行操作 // 1. 如果convertView==null 从系统中分配内容 // 2. 如果convertView!=null 直接拿convertView来使用 // 同时 把view中的控件作为附属包裹连接在view中(getTag()、setTag()) @Override public View getView(int position, View convertView, ViewGroup parent) { // 一行显示的view View view = null; // 模拟SimpleAdapter的做法 一行只显示两个TextView(封装在holder中) ViewHolder holder = null; // 判断convertView是否为空 并根据判断的结果进行不同的操作 if(convertView == null) { // 从系统中分配内存作为view // 通过LayoutInflater把布局转换成view LayoutInflater inflater = LayoutInflater.from(MainActivity.this); // new View()从系统中分配内存 view = inflater.inflate(android.R.layout.simple_list_item_2, null); // 创建holder对象 从布局中找出textview(查找是很耗时间的) holder = new ViewHolder(); holder.textview1 = (TextView) view.findViewById(android.R.id.text1); holder.textview2 = (TextView) view.findViewById(android.R.id.text2); // 把view与holder绑定在一起 view.setTag(holder); } else { // 直接拿convertView来使用 view = convertView; // 把holder从view的绑定中提取出来(基本上不需要时间的) holder = (ViewHolder) view.getTag(); } // 给textview设置显示的内容 Map<String, Object> map = list.get(position); // 获得list中的map String name = (String) map.get("name"); // map中根据key=name获取对应的值 holder.textview1.setText(name); int age = (Integer) map.get("age"); // map中根据key=age获得对应的值 holder.textview2.setText(age+""); Log.i("ListView", "getView: " + position + ", View is " + view + ", convertView is " + convertView); return view; } // viewHolder是MyAdapter的内部类 // 负责把textview1和textview2进行简单的打包 class ViewHolder { public TextView textview1; public TextView textview2; } }
BaseAdapter自定义适配器的更多相关文章
- BaseAdapter自定义适配器——思路详解
BaseAdapter自定义适配器——思路详解 引言: Adapter用来把数据绑定到扩展了AdapterView类的视图组.系统自带了几个原生的Adapter. 由于原生的Adapter视图功能太少 ...
- Android中GridView通过自定义适配器(未优化)实现图文视图排列
Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用该组件.下面我们通过代码实现如下图例(为了方便截图,将事件处理(土 ...
- 细解ListView之自定义适配器
下面我们将以一个例子来讲述ListView之自定义适配器 首先我们看一下效果图: [分析] 首先:需要创建一个ListView控件,自定义适配器是为了实现自定义ListView的ListView_It ...
- Android -- ListView(SimpleAdapter) 自定义适配器
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA ...
- (转)Android之自定义适配器
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果. 有这样一个Demo ...
- Android:自定义适配器
无论是ArrayAdapter还是SimpleAdapter都继承了BaseAdapter,自定义适配器同样继承BaseAdapter 实例:Gallery实现图片浏览器 <?xml versi ...
- 最简单的自定义适配器adapter
下面是一个非常简单的自定义适配器的总体源码,从这个源码入门,就可以慢慢学会适配器了 适配器的作用: 完成数据和界面控件的绑定,把数据绑定到界面的现实控件条目上(对于listView,应该是listVi ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- ListView的自定义适配器及其优化(listView序号混乱问题的处理)
ListView是最常使用的android组件之一,关于listView的优化问题刚刚了解了一些,在这里做出总结. PS:如果想让ListView中的item根据数据内容显示item的大小,需要在it ...
随机推荐
- c++实现加密和解密算法以及JNI技术的应用实例
#include "jiami.h" #include "jni.h" #include "com_test_start_CommonClassLoa ...
- oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏!
oracle 编译中一个关于clntsh 库的一个 帖子 ,收藏! ------------------------------------------------------------------ ...
- C++中的异常处理(一)
来自:CSDN 卡尔 后续有C++中的异常处理(二)和C++中的异常处理(三),C++中的异常处理(二)是对动态分配内存后内部发生错误情况的处理方法,C++中的异常处理(三)中是使用时的异常说明. ...
- jQuery1.11源码分析(4)-----Sizzle工厂函数[原创]
在用前两篇讲述完正则表达式.初始化.特性检测之后,终于到了我们的正餐——Sizzle工厂函数! Sizzle工厂函数有四个参数, selector:选择符 context:查找上下文 results: ...
- IE7 -- 鼠标移入显示下拉框 不显示的问题 / 以及宽度问题
这个问题,真的是打击到我了,我一度不相信自己无法解决这个问题.但是我就是真的没有解决. 那么问题解决方案是: 第一 祖先级别有一个相对定位,父级再有一个定位,那么绝对定位显示出来的元素就会不显示. 第 ...
- tyvj1213 嵌套矩形
描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度).例如 ...
- Robberies
Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- (转载)解决ListView中使用EditText所遇到的一些冲突
大家都知道在listView中使用editText,在输入过程中是有冲突的.今天稍微研究了一下这个问题,有一点点小小的心得和大家一起分享下. 首先建立一个最简单的demo,主界面就是一个ListVie ...
- Poj 3233 Matrix Power Series(矩阵二分快速幂)
题目链接:http://poj.org/problem?id=3233 解题报告:输入一个边长为n的矩阵A,然后输入一个k,要你求A + A^2 + A^3 + A^4 + A^5.......A^k ...
- HDOJ 1874
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...