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;
     }