用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
原创粉丝点击