相信大部分人对View.setTag()方法不太在意,但是在实际的开发中,对系统软件的优化中,这个是非常重要的一个方法。setTag()方法可以为不同,可以将一些数据存放到View当中。放出一个例子大家体会一下。
金台网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。成都创新互联公司从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
重写BaseAdapter的getView()方法:
package com.example.multialbum; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalp_w_picpathloader.core.ImageLoader; public class AlbumListViewAdapter extends BaseAdapter { protected ImageLoader p_w_picpathLoader = ImageLoader.getInstance(); private LayoutInflater mInflater; private ListmAlbums; private Context context; private String TAG = AlbumListViewAdapter.class.getSimpleName(); /** * 列表项目View持有者 * */ public class ViewHolder { ImageView mAlbumCover; TextView mAlbumName; TextView mAlbumNum; } /** * 适配器构造器 * * @param ctx * Context 上下文 */ public AlbumListViewAdapter(Context ctx) { this.context = ctx; mAlbums = new ArrayList (0); mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } /** * 设置新的相册数据 */ public void setAlbumsList(List albums) { mAlbums.clear(); mAlbums.addAll(albums); notifyDataSetChanged();// 通知刷新listView。 } /** * */ public void addAlbums(List albums) { mAlbums.addAll(albums); notifyDataSetChanged(); } @Override public int getCount() { return mAlbums.size(); } /** * 清除所有项目。 */ public void clear() { mAlbums.clear(); } @Override public Object getItem(int position) { if (mAlbums.isEmpty() || position >= mAlbums.size()) { return null; } return mAlbums.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View view, ViewGroup viewGroup) { ViewHolder holder; if (view == null) { view = mInflater.inflate(R.layout.album_list_item, null); holder = new ViewHolder(); // 获取到资源 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)); Album album = 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, new Util.AnimateFirstDisplayListener()); return view; } }
除此之外,setTag()可以为View添加标记,通过getTag()方法取得标记。可以根据标记来判断是不是原来的特定View