【ListView】三行搞定你的Adapter,和几十行的getview Say goodBye
来源:互联网 发布:金天鹅软件 编辑:程序博客网 时间:2024/06/05 13:39
listview的写法有很多,在这里我不去一一列举。无非就是利用convertview和viewholder。
今天给大家提供一条新的思路,不用去建立viewholder,也不用在adapter里写大量的代码。
demo地址下载
三行搞定getview()。
@Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if(convertView == null){ convertView = new MyListItem(mContext);//初始化listview的item } ((MyListItem)convertView).setData(itembeans.get(position));//绑定数据 return convertView;//显示到界面 }
聪明的人应该看出来的,我把listview的item封装成了一个类,在adapter里做的仅仅是复用convertview和绑定数据源的操作。
一些复杂的操作我们完全可以交由我们封装好的类去做。这样,不仅优化了性能,更利用安卓自绘的高性能,且分离的大部分代码和功能,让适配器真的只起到了桥接的作用。
下面是实现流程:
1.自定义item布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imgPic" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
第二步,封装数据类型
public class MyListItemBean { public String name; public Drawable img; public MyListItemBean(String name,Drawable img){ this.name = name; this.img = img; }}
第三步,将所需展示的item封装成自定义的view
public class MyListItem extends LinearLayout{ public TextView tvName; public ImageView imgPic; //构造方法 载入view,绑定控件 id public MyListItem(Context context) { super(context); // TODO Auto-generated constructor stub View.inflate(context, R.layout.my_list_item, this); tvName = (TextView) findViewById(R.id.tvName); imgPic = (ImageView) findViewById(R.id.imgPic); } /** * 绑定数据源 * @param item */ public void setData(MyListItemBean item){ tvName.setText(item.name); imgPic.setImageDrawable(item.img); }}
第四步,在MainActivity中定义适配器
/** * 内部adapter 类 适配器 * @author Administrator * */ class MyAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return itembeans.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return itembeans.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 if(convertView == null){ convertView = new MyListItem(mContext);//当首次加载时初始化listview的item } ((MyListItem)convertView).setData(itembeans.get(position));//利用缓存的convertview绑定数据并显示 return convertView;//显示到界面 } }
好了 ,到这里所有的准备工作都已经完成,接下来的就是给你的listview绑定这个适配器了。
这样写的优点:
1.效率上和传统写法一致。
2.避免了在adapter中进行大量数据绑定操作
3.有效封装,使得业务逻辑和代码层次非常清晰,后期修改起来也非常方便。
当然,没有一种写法是十全十美的,这里只是一种思路,希望大家多指正。
0 0
- 【ListView】三行搞定你的Adapter,和几十行的getview Say goodBye
- android使用ListView和Adapter.getView Recycler的工作原理
- android使用ListView和Adapter.getView Recycler的工作原理
- ListView和GridView 自定义Adapter的getView()方法调用问题
- ListView条目点击侦听和Adapter的getView调用
- 真的就有人可以用两三行代码实现你写了几十行代码的功能.....
- 分离adapter的getView
- Adapter的getView方法
- adapter的 getView 获取ListView的Position位置的ItemView
- ListView 和 Adapter 的基础——getView()的深入理解
- 关于listview的自定义adapter不执行getview()方法的几种情况和解决办法
- ListView的adapter中getView被多次调用的问题
- 1.0 listview的adapter中getview的三种写法
- 对listview adapter的getview方法的新认识viewholder
- listview的adapter中getview的三种写法
- android listView 重写Adapter方法getView的性能优化问题
- ListView,GridView的Adapter中的getView执行异常
- ListView,GridView,Gallery的Adapter中的getView多次调
- 私有点播cdn切换前-测试总结
- 网络安全书籍推荐
- RocketMQ(二)——TopicPublicInfo
- Caused by: java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadP
- 使用canvas 将img 的url 转换为base64格式
- 【ListView】三行搞定你的Adapter,和几十行的getview Say goodBye
- Xcode插件管理工具Alcatraz
- 第四周项目二数据结构之自建算法库——单链表
- php连接mongoDB的几个问题
- leetcode Longest Palindromic Substring
- ewebeditor上传文件大小及在线编辑器jsp版使用心得
- C++设计模式——抽象工厂模式
- iOS---XCode7 + IOS9 问题及解决方案
- Lowest Common Ancestor of a Binary Search Tree -- leetcode