View.setTag()
相信大部分人对View.setTag()方法不太在意,但是在实际的开发中,对系统软件的优化中,这个是非常重要的一个方法。setTag()方法可以为不同,可以将一些数据存放到View当中。放出一个例子大家体会一下。
重写BaseAdapter的getView()方法:
packagecom.example.multialbum;importjava.util.ArrayList;importjava.util.List;importandroid.content.Context;importandroid.util.Log;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.TextView;importcom.nostra13.universalp_w_picpathloader.core.ImageLoader;publicclassAlbumListViewAdapterextendsBaseAdapter{protectedImageLoaderp_w_picpathLoader=ImageLoader.getInstance();privateLayoutInflatermInflater;privateList<Album>mAlbums;privateContextcontext;privateStringTAG=AlbumListViewAdapter.class.getSimpleName();/***列表项目View持有者**/publicclassViewHolder{ImageViewmAlbumCover;TextViewmAlbumName;TextViewmAlbumNum;}/***适配器构造器**@paramctx*Context上下文*/publicAlbumListViewAdapter(Contextctx){this.context=ctx;mAlbums=newArrayList<Album>(0);mInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}/***设置新的相册数据*/publicvoidsetAlbumsList(List<Album>albums){mAlbums.clear();mAlbums.addAll(albums);notifyDataSetChanged();//通知刷新listView。}/****/publicvoidaddAlbums(List<Album>albums){mAlbums.addAll(albums);notifyDataSetChanged();}@OverridepublicintgetCount(){returnmAlbums.size();}/***清除所有项目。*/publicvoidclear(){mAlbums.clear();}@OverridepublicObjectgetItem(intposition){if(mAlbums.isEmpty()||position>=mAlbums.size()){returnnull;}returnmAlbums.get(position);}@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicViewgetView(intposition,Viewview,ViewGroupviewGroup){ViewHolderholder;if(view==null){view=mInflater.inflate(R.layout.album_list_item,null);holder=newViewHolder();//获取到资源holder.mAlbumCover=(ImageView)view.findViewById(R.id.album_cover);holder.mAlbumName=(TextView)view.findViewById(R.id.album_name);holder.mAlbumNum=(TextView)view.findViewById(R.id.album_num);view.setTag(holder);}else{holder=(ViewHolder)view.getTag();}Log.d(TAG,String.format("poistion=%d",position));Albumalbum=mAlbums.get(position);holder.mAlbumName.setText(album.mName);holder.mAlbumNum.setText(album.mNum);p_w_picpathLoader.displayImage("file://"+album.mCoverUrl,holder.mAlbumCover,Constants.p_w_picpath_display_options,newUtil.AnimateFirstDisplayListener());returnview;}}
除此之外,setTag()可以为View添加标记,通过getTag()方法取得标记。可以根据标记来判断是不是原来的特定View
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。