博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)ListView——BaseAdapter
阅读量:5147 次
发布时间:2019-06-13

本文共 3947 字,大约阅读时间需要 13 分钟。

原文连接:

 

自定义Adapter继承BaseAdapter 

Custom_BaseAdapterActivity.java

public class Custom_BaseAdapterActivity extends ListActivity {    List
> list; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); list = getListData(); setContentView(R.layout.listdemo2); MyAdapter myAdapter = new MyAdapter(this); setListAdapter(myAdapter); } public List
> getListData(){ list = new ArrayList
>(); Map
map1 = new HashMap
(); Map
map2 = new HashMap
(); map1.put("headimg", R.drawable.lxq); map1.put("nickname", "蜗牛/"); map1.put("textsign", "乘着风游荡在蓝天边 一片云掉落在我面前."); map2.put("headimg", R.drawable.hyl); map2.put("nickname", "轩凌涵舞"); map2.put("textsign", "以后我儿子得有两门必修课,打篮球和拉小提琴."); list.add(map1); list.add(map2); return list; } public final class ViewHolder{ public ImageView headimg; public TextView nickname; public TextView textsign; public Button listbtn; } public class MyAdapter extends BaseAdapter{ private LayoutInflater flater; public MyAdapter(Context context) { super(); this.flater = LayoutInflater.from(context); } public int getCount() { // TODO Auto-generated method stub return list.size(); } public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder = null; if(convertView == null){ holder = new ViewHolder(); convertView = flater.inflate(R.layout.user2, null); holder.headimg = (ImageView) convertView.findViewById(R.id.headimg); holder.nickname = (TextView) convertView.findViewById(R.id.nickname); holder.textsign = (TextView) convertView.findViewById(R.id.textsign); holder.listbtn = (Button) convertView.findViewById(R.id.listbtn); convertView.setTag(holder); } else{ holder = (ViewHolder) convertView.getTag(); } holder.headimg.setBackgroundResource((Integer)list.get(position).get("headimg")); holder.nickname.setText((String)list.get(position).get("nickname")); holder.textsign.setText((String)list.get(position).get("textsign")); holder.listbtn.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { } }); return convertView; } }}

 

listdemo2.xml

 

 

user2.xml

 

 

 

引用
编写自定义Adapter可以继承BaseAdapter类,如果是数据库使用可以继承CursorAdapter。在本例中继承了BaseAdapter类,BaseAdapter是一个抽象类,必须在它的子类中实现下面的方法: 
• int getCount()   返回总数据源中总的记录数; 
• Object getItem(int position)   根据选择的项目的位置,获得选择的数据源中某个项目的数据; 
• long getItemId(int position)   根据选择的项目的位置; 
• View getView(int position, View convertView, ViewGroup parent)   获得要展示的项目View对象。 
这里最为麻烦的方法就是getView(),getView()方法是ListView的每个列表项目绘制在屏幕上时被调用。该方法其中的一个参数是convertView,在ListView第一次显示列表项目的时候,convertView是null值。当向上滑动屏幕时候,屏幕上面的列表项目退出屏幕,屏幕下面原来不可见的列表项目会进入屏幕,这个时候的convertView不是null值,下面代码的处理对于提供ListView控件提高性能是至关重要的。 
if (convertView == null) { convertView = mInflater.inflate(R.layout.main, null); holder = new ViewHolder(); holder.text = (TextView) convertView .findViewById(R.id.textview); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); }

 

只有在convertView为null时才去实例化控件,创建convertView对象、holder对象,其中convertView对象是通过mInflater.inflate(R.layout.main, null)方法,从一个main.xml布局文件中加载并创建的。 
而在convertView非null的时候不会实例化控件,否则每次都要实例化控件,当列表项目很多时,用户反复滑动屏幕会有“卡”的感觉,不再流畅了。 
ViewHolder类是将每一个项目中的控件封装起来的类,可以在convertView 为null时候创建ViewHolder类的实例holder,然后通过convertView.setTag(holder);把它放到convertView中,而在convertView非null时候,再通过convertView.getTag()过的一个ViewHolder类的实例,这样在翻屏的时候就不会反复创建ViewHolder实例对象了,就本例而言只是创建了9个ViewHolder实例。 

 

转载于:https://www.cnblogs.com/lovers/articles/2699721.html

你可能感兴趣的文章
WCF探索之旅(三)——IIS公布WCF服务
查看>>
update与upgrade
查看>>
轻量级的绘制图表js库--Morris.js
查看>>
POS tagging的解釋
查看>>
TI(德州仪器) TMS320C674x逆向分析之二
查看>>
WCF学习
查看>>
获取发送请求的ip
查看>>
Activity详解
查看>>
CCF201409-2 画图
查看>>
文件基本操作
查看>>
eclipse中添加tomcat
查看>>
【转】IntelliJ IDEA 创建 hello world Java web Maven项目
查看>>
浅谈OSI七层架构模型1
查看>>
云计算的三种模式:IaaS、PaaS和SaaS
查看>>
Zookeeper使用实例——服务节点管理
查看>>
编译Java类后不重启Tomcat有两种方式:热部署、热加载
查看>>
求解乘法逆元
查看>>
多版本软件构建策略分析
查看>>
防作弊原理
查看>>
使用JDK自带的Stax操作XML
查看>>