listView = (ListView) findViewById(R.id.listview);
mAdapter = new VideoListAdapter(this);
listView.setAdapter(mAdapter);
主要adapter
public class VideoListAdapter extends BaseAdapter {
int[] viewtype = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0};//1 = jcvd, 0 = textView。主要的itemview类型数组
Context context;
// LayoutInflater mInflater;
public VideoListAdapter(Context context) {
this.context = context;
// mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return viewtype.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//This is the point
// if (convertView != null && convertView.getTag() != null && convertView.getTag() instanceof VideoHolder) {
// ((VideoHolder) convertView.getTag()).jcVideoPlayer.release();
// }
if (getItemViewType(position) == 1) {
VideoHolder viewHolder;
if (convertView != null && convertView.getTag() != null && convertView.getTag() instanceof VideoHolder) {
viewHolder = (VideoHolder) convertView.getTag();//优化方法,判断是否以及加载,复用view
} else {
viewHolder = new VideoHolder();
LayoutInflater mInflater = LayoutInflater.from(context);
convertView = mInflater.inflate(R.layout.item_videoview, null);//第一个itemview布局文件
viewHolder.jcVideoPlayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.videoplayer);
convertView.setTag(viewHolder);
}
viewHolder.jcVideoPlayer.setUp(
VideoConstant.videoUrls[0][position], JCVideoPlayer.SCREEN_LAYOUT_LIST,
VideoConstant.videoTitles[0][position]);
Picasso.with(ListViewMultiHolderActivity.this)
.load(VideoConstant.videoThumbs[0][position])
.into(viewHolder.jcVideoPlayer.thumbImageView);
} else {
TextViewHolder textViewHolder;
if (convertView != null && convertView.getTag() != null && convertView.getTag() instanceof TextViewHolder) {
textViewHolder = (TextViewHolder) convertView.getTag();
} else {
textViewHolder = new TextViewHolder();
LayoutInflater mInflater = LayoutInflater.from(context);
convertView = mInflater.inflate(R.layout.item_textview, null);//第二个itemview布局文件
textViewHolder.textView = (TextView) convertView.findViewById(R.id.textview);
convertView.setTag(textViewHolder);
}
}
return convertView;
}
@Override
public int getItemViewType(int position) {
return viewtype[position];
}
@Override
public int getViewTypeCount() {
return 2;
}
class VideoHolder {
JCVideoPlayerStandard jcVideoPlayer;//item1初始化
}
class TextViewHolder {
TextView textView;//item2初始化
}
}
优化:
:创建一个容器装要复用的View,设置判断,达到减少findViewById的次数的效果
/*
* 渲染(填充),调用data.size次
* position 索引
* convertView 条目的View
* parent :Listview
* */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//当convertView首次加载的时候
if (convertView == null) {
//获取打气筒
LayoutInflater inflater = LayoutInflater.from(context);
//填充单个Item
convertView = inflater.inflate(R.layout.item_main, null);
//获取Viewholder对象,减少findViewById的次数
holder = new ViewHolder();
//从填充的条目View中找到我们所关心的控件
holder.textView = convertView.findViewById(R.id.tv_my);
//将holder装进convertView的口袋
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//填充数据
holder.textView.setText(date.get(position));
return convertView;
}
//创建一个容器装要复用的View
static class ViewHolder {
TextView textView;
}