下面是一段自定义适配器中的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也修改了,这样的话,上面的代码应该很好理解了。

view中的setTag和getTag方法的理解的更多相关文章

  1. View的setTag和getTag方法

    ---恢复内容开始--- public View getView(int position, View convertView, ViewGroup parent) { Msg msg =getIte ...

  2. View的setTag()与getTag()方法使用

    通常我们是用findViewById()方法来取得我们要使用的View控件,不过除了这一种方法之处 ,我们还可以用View中的setTag(Onbect)给View添加一个格外的数据,再用getTag ...

  3. Android view中的requestLayout和invalidate方法

    Android view中的requestLayout和invalidate方法 requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent v ...

  4. 转载:JAVA中关于set()和get()方法的理解及使用

    对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者 ...

  5. JAVA中关于set()和get()方法的理解及使用

    对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者 ...

  6. JAVA中关于set()和get()方法的理解以及使用

    set()和get()方法的理解 set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的. 而且,在类中使用set和get方法时,都 ...

  7. android之在view中内嵌浏览器的方法

    我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有 ...

  8. 在view中常见的四种方法的使用场合

    四种方法,使view创建好里面就有东西:[1.init  2.initWithFrame使用代码创建的时候.(从文件创建的时候不一定调用:1.init  2.initWithFrame这两个方法) 3 ...

  9. 对于自定义标签类中JspBody类的invoke方法的理解

    下面是javaeeAPI中对于invoke()方法的介绍: 其中的参数out是一个Writer类的对象,如果写null,就是将标签体内容写到了与此jsp相关联的JspWriter对象,也就是下面的w: ...

随机推荐

  1. C++返回引用的函数

    要以引用返回函数值,则函数定义时的格式如下: 类型标识符&类型名 (形参列表及类型说明) { 函数体 } 用const限定引用的声明方式为: const 类型标识符&引用名=目标变量名 ...

  2. bzoj 3328: PYXFIB 数论

    3328: PYXFIB Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 130  Solved: 41[Submit][Status][Discuss ...

  3. 找到个好的讲PYTHON FILE IO的文档,收藏

    现在我感觉快入门了哈, 这两天,可以用PYTHON写一点自己想要实现的东东了. 但文件,IO,编码,邮件,始终有点续不完全. 这个文档,我看行.. http://www.dabeaz.com/pyth ...

  4. WEB 开发异常:java.lang.ClassNotFoundException

    某个类明明是有的,可是eclipse 启动tomcat服务器运行web项目,出现如题异常. java.lang.ClassNotFoundException 信息: Set web app root ...

  5. STL unordered_set

    http://www.cplusplus.com/reference/unordered_set/unordered_set/ template < class Key, // unordere ...

  6. c#中使用SESSION需要注意的几个问题

    C#的SESSION和其它程序中的SESSSION可能有一点的不同,下面讲下哪飞网程序员遇到的一个地方使用SESSION的问题.希望对大家有所帮助 一.在页面中用SESSION,存值session[& ...

  7. java 全角半角转换函数

    /** * 半角转全角 * @param input String. * @return 全角字符串. */ public static String ToSBC(String input) { ch ...

  8. MOSS母板页制作 学习笔记(一)

    转:http://xiachanghao1990.blog.163.com/blog/static/4869602420114235536573/ 母版页制作其实应该算是一个比较基础的工作,但是熟练制 ...

  9. Linux route命令详解和使用示例(查看和操作IP路由表)

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  10. C# Protect the Password inside a TextBox ZZ

    If the Text property is called, it will send an WM_GETTEXT message, so it will surely be an internal ...