相信大部分人对View.setTag()方法不太在意,但是在实际的开发中,对系统软件的优化中,这个是非常重要的一个方法。setTag()方法可以为不同,可以将一些数据存放到View当中。放出一个例子大家体会一下。
重写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 List<Album> mAlbums;
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<Album>(0);
mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
* 设置新的相册数据
*/
public void setAlbumsList(List<Album> albums)
{
mAlbums.clear();
mAlbums.addAll(albums);
notifyDataSetChanged();// 通知刷新listView。
}
/**
*
*/
public void addAlbums(List<Album> 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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。