下面是一段自定义适配器中的getView方法,其中使用了view的一个setTag和getTag方法

  View中的setTag(Onbect)表示给View添加一个格外的数据(相当于缓存),以后可以用getTag()将这个数据取出来。

  下面是继承BaseAdapter的一个自定义适配器中的getView方法的内容,其中就用到了setTag和getTag方法

public View getView(int arg0, View arg1, ViewGroup arg2) {
// #A 加载
Log.d(LogUtil.TAG,"enter "+ arg0 + "");
if (arg1 == null) {
arg1 = layoutInflater.inflate(R.layout.listview_item, null);
HoldView holdView = new HoldView(arg1);
arg1.setTag(holdView); //加载控件
Log.d(LogUtil.TAG, arg0 + " null -- load");
}
// #B 拿到当前的数据
News news = newsList.get(arg0);
int drawId = news.getDrawID();
String title = news.getTitle();
String text = news.getText();
Log.d(LogUtil.TAG,"drawId:"+ drawId + " title:"+ title + " text:"+text);
// #C 将数据对应到控件
HoldView holdView = (HoldView) arg1.getTag();
holdView.iv_id.setImageResource(drawId);
holdView.tv_title.setText(title);
holdView.tv_text.setText(text);
return arg1;
}

  方法中的arg0代表下标,arg1即代表缓存,首次的时候,缓存中没有数据,进入if语句中,然后把控件存放在arg1中,也就是放入缓存中,以后就不用每次都从布局文件中取了,提高了效率。
  先前一直不明白一点:最后的这个return arg1有点不明白,应该说holdView中的数据已经填充上了,但是holdView已经是从arg1中拿出来的修改了,又没有重新放进去,arg1又怎么会改变?

  最后问了一下网友,说是holdView只是arg1中对应的一个引用,当修改了holdView,对应的arg1也修改了,这样的话,上面的代码应该很好理解了。

最新文章

  1. glade2支持C++代码的输出(3)
  2. 二、Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)
  3. 开始→运行(cmd)命令大全
  4. 使AJAX调用尽可能利用缓存特性
  5. 关于Python中的self
  6. maven tomcat1.7环境下构建javaweb 项目
  7. UVA 10718 Bit Mask 贪心+位运算
  8. 数据库管理——安全管理——识别SQLServer中空密码或者弱密码的登录名
  9. DBC文件小结
  10. js form表单 鼠标移入弹出提示功能
  11. saliency 2015-2016的论文、代码
  12. 交叉编译python2.7.7
  13. 2019.01.21 bzoj2989: 数列(二进制分组+主席树)
  14. [GXOI/GZOI2019]逼死强迫症
  15. asp.net core 中的SignalR与web前端进行实时通信
  16. Django快速创建博客,包含了整个框架使用过程,简单易懂
  17. ftp简单命令
  18. Discuz常见小问题2-如何在新建的页面上只显示一部分板块
  19. Phyton Flask框架学习记录。
  20. TSOJ--方格上的路径

热门文章

  1. ubuntu 10.04 安装qt 5.0.2
  2. 【Ecmall】ECMall2.x模板制作入门系列(认识ECMall模板)
  3. SaltStack的salt-api里如何指定用户执行cmd.script
  4. JSON数据与JavaScript对象转换
  5. [wikioi]过河卒
  6. 设置VS2015上关闭和打开tab快捷键
  7. redis pub/sub 发布订阅
  8. django 常用命令
  9. How to Create a SharePoint 2010 Project Without SharePoint Server
  10. AsyncSocket的使用