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);}@Overridepublic int getCount() {return viewtype.length;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}@Overridepublic int getItemViewType(int position) {return viewtype[position];}@Overridepublic 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;
}