用setTag()和getTag()来优化Listview
来源:互联网 发布:dhcp 端口 编辑:程序博客网 时间:2024/05/21 11:01
今天算是正式学android开发的第五天,看郭霖的《第一行代码》的listview哪一节碰到了一些问题,不清楚其中的setTag()和getTag()是如何进行绣花的,就百度和google了一些文章看,记录一下心得。不过我还是新手,java水平和android水平略渣,可能有很多理解错误的地方
public View getView(int position,View convertView,ViewGroup parent){ //使用的是发短信界面的一段代码作为例子,Message是短信的实体类 Message message = getItem(position); //获得view 和viewHolder的引用,其中viewHolder包含了view的子控件的引用 View view; ViewHolder viewHolder; //判断缓存是否为空 if(convertView == null){ //把一个准备当做listview的单个条目的xml文件充进view引用中,化身为一个对象 view = View.inflate(mContext,resourceId,null); //把view的每个子控件都装入viewHolder这个包裹中 viewHolder = new ViewHolder(); viewHolder.leftlayout = (LinearLayout) view.findViewById(R.id.left_layout); viewHolder.rightlayout = (LinearLayout) view.findViewById(R.id.right_layout); viewHolder.leftMessage = (TextView) view.findViewById(R.id.left_message); viewHolder.rightMessage = (TextView) view. findViewById(R.id.right_message); //把viewHolder这个包裹系在view对象的身上,viewHolder这个包裹中有view的子控件 view.setTag(viewHolder); } //当上一个view消失在屏幕外,便转变成了convertView,但是身上还系着viewHolder包裹 else { //如果convertView不为空,就把它重新变为view view = convertView; //把重新做人的view身上的包裹取下来,由于里面包含已经着view的子控件,因此可以直接利用,不必重复生成 viewHolder = (ViewHolder) view.getTag(); } //下面的if else就是给view的子控件设置显示的信息了,与主题无关 if(message.getType() == Message.RECEIVE){ viewHolder.leftlayout.setVisibility(View.VISIBLE); viewHolder.rightlayout.setVisibility(View.GONE); viewHolder.leftMessage.setText(message.getContent()); } else if(message.getType() == Message.SEND){ viewHolder.rightlayout.setVisibility(View.VISIBLE); viewHolder.leftlayout.setVisibility(View.GONE); viewHolder.rightMessage.setText(message.getContent()); } return view; } //设置一个ViewHolder类,让它打包包含了一些空的引用 class ViewHolder{ LinearLayout leftlayout; LinearLayout rightlayout; TextView leftMessage; TextView rightMessage; }}
0 0
- 用setTag()和getTag()来优化Listview
- 理解用setTag 和 Viewholder 来优化listView
- Listview中setTag()/getTag()
- Android setTag()和getTag()
- setTag()和getTag()方法
- setTag()和getTag()
- setTag()和getTag() android
- 关于View::setTag()和getTag()
- setTag()和getTag()应用
- Android的setTag 和getTAG
- 关于View::setTag()和getTag()
- View的setTag() 和 getTag()
- view.setTag()和view.getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- setTag()/getTag()
- 线程间通信--多生产者多消费者问题
- 猜数字
- UVA - 11093 Just Finish it up 难道我这是神解?
- 第四周项目五-用递归方法求解(用递归求出两个数的最大公约数)
- LeetCode 3 Longest Substring Without Repeating Characters
- 用setTag()和getTag()来优化Listview
- HDU 4081 次小生成树变形记
- 其它文章--我不写,只记录我看过的一些东西,以便不用重复百度。
- c#多维数组
- HDU3613 Best Reward 3连发之KMP
- 个人所得税计算器
- XMPP
- 几个sql语句例子
- Spring_boot 框架的简单的搭建