Android listview优化以及listview混合itemview
?
主要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;
? ? }
?
總結
以上是生活随笔為你收集整理的Android listview优化以及listview混合itemview的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 对象与JSON串互相转换
- 下一篇: linux虚拟机系统下安装jdk