ListView的优化

ListView工作原理:
Adapter是ListView与数据之间的桥梁
ListView在开始绘制的时候,系统首先调用getCount(),根据其返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行地绘制ListView的每一项。
当ListView的每一项将要显示时,都会调用Adapter的getView()方法返回一个View。
ListView中有多少项,就调用多少次getView()方法去创建每一项的View,这一过程是耗时操作。

当项数很大时,性能会急剧下降,所以必须采用性能优化方法。

性能优化采用ViewHolder,具体代码实现如下(仅供参考):

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
util = new DBUtil(context);
final ViewHolder viewHolder;


if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.mymusic_item, null);
myMusic = list.get(position);
viewHolder.mymusic_fav = (ImageView) convertView
.findViewById(R.id.mymusic_fav);
viewHolder.mymusic_title = (TextView) convertView
.findViewById(R.id.mymusic_title);
viewHolder.mymusic_artist = (TextView) convertView
.findViewById(R.id.mymusic_artist);
viewHolder.mymusic_filePath = (TextView) convertView
.findViewById(R.id.mymusic_filePath);
viewHolder.mymusic_hq = (ImageView) convertView
.findViewById(R.id.mymusic_hq);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mymusic_fav
.setBackgroundResource(myMusic.getState() == 0 ? R.drawable.icon_favourite_normal
: R.drawable.icon_favourite_checked);
viewHolder.mymusic_hq.setBackgroundResource(R.drawable.media_hq);
viewHolder.mymusic_hq.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
Intent intent = new Intent(context, DialogActivity.class);
context.startActivity(intent);


}
});
viewHolder.mymusic_title.setText(myMusic.getMusic_name().toString());
viewHolder.mymusic_artist.setText(myMusic.getArtist().toString());
viewHolder.mymusic_filePath.setText(myMusic.getFilepath().toString());
viewHolder.mymusic_fav.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
myMusic2 = list.get(position);
if (myMusic.getState() == 0) {
viewHolder.mymusic_fav
.setBackgroundResource(R.drawable.icon_favourite_checked);
myMusic.setState(1);
util.add_fav(myMusic2.getMusic_name(),
myMusic2.getArtist(), myMusic2.getFilepath(),
myMusic2.getDiscription(), myMusic2.getSize());
Toast.makeText(context, "已收藏我的最爱", Toast.LENGTH_LONG)
.show();
} else {
viewHolder.mymusic_fav
.setBackgroundResource(R.drawable.icon_favourite_normal);
myMusic.setState(0);
util.delete_fav(myMusic2.getMusic_name());
Toast.makeText(context, "已取消收藏", Toast.LENGTH_LONG).show();
}


}
});
return convertView;
}


class ViewHolder {
public TextView mymusic_title;
public TextView mymusic_artist;
public TextView mymusic_filePath;
public ImageView mymusic_fav;
public ImageView mymusic_hq;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值