Android listview优化以及listview混合itemview

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目中assets与static的区别

在使用vue脚手架生成的目录中,会有一个src/assets还有一个static。 两者都可以用来放一些静态文件。那有什么区别呢? static中的文件不会被webpack打包,文件被复制到dist/static assets中的文件会经过 webpack 打包,重新编译。…

oracle 用户管理

一、创建用户概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。create user 用户名 identified by 密码; 注意:oracle有个毛病,密码必须以字母开头,如果以数字开头&…

Android 获取当前的时间。年月日,时分秒,星期几

SimpleDateFormat alldate new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//获取日期时间 SimpleDateFormat year new SimpleDateFormat("yyyy");//获取年份SimpleDateFormat month new SimpleDateFormat("MM");//获取月份SimpleDateFormat m…

mac通过homebrew安装opensdk11

1、安装cask brew tap homebrew/cask-versions 2、安装adoptopenjdk/openjdk brew tap adoptopenjdk/openjdk 3、查看一下java、jdk版本 brew search java brew search jdk 4、安装adoptopenjdk11 brew cask info adoptopenjdk11 brew cask install adoptopenjdk11…

缺失值侦测与处理

缺失值的侦测的方法: 1、mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格 这个矩阵呢,表示像第一行缺失0个的模式有13行,像第二行缺失1个的模式有1行,如此类推 所以呢,一共就有0*131*1…

工作172:自己工作开始封装的一个小组件

其实很简单 <!--封装部门选择的插件 需要的组件 子组件--> <template><el-select :value"value" placeholder"请选择所属部门" change"handleChange"><el-optionv-for"department in departments":key"de…

高德地图 amap 设置鼠标样式

我的需求&#xff0c;要在高德地图里面做一个地图选点的功能。这个功能很简单&#xff0c;但是高德地图的默认鼠标样式是一只小手&#xff0c;不适合做选点用。 高德地图中有4中样式如下图 对应名称如下&#xff1a; pointer&#xff0c;default&#xff0c;move&#xff0c…

Android 设置定时刷新页面数据,最小自动刷新时间

设置初始时间 SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String thistime df.format(new Date());SharedPreferences sharedPreferences getSharedPreferences("industryInfo", Context.MODE_PRIVATE); //私有…

eslint 设置全局 变量

我在做高德地图开发的时候&#xff0c;喜欢将map作为全局变量&#xff0c;但是eslint会显示报红。 所以需要在.eslintrc.js中加上如下配置&#xff1a; "globals": {"map": true}

Android 自定义软键盘实现

module链接&#xff1a;https://download.csdn.net/download/meixi_android/10652565 compile project(:edlibrary) , :edlibrary <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

微信小程序自定义组件生命周期

created 组件实例化&#xff0c;但节点树还未导入&#xff0c;因此这时不能用setData attached 节点树完成&#xff0c;可以用setData渲染节点&#xff0c;但无法操作节点 ready (不是onReady) 组件布局完成&#xff0c;这时可以获取节点信息&#xff0c;也可以操作节点 mov…

改善代码可测性的若干技巧

概述 软件的工程性体现在质量与效率。单测是构成软件质量的第一道防线&#xff0c;而单测覆盖率是软件质量的重要指标之一。 编写容易测试的代码&#xff0c;可带来更佳的单测覆盖率&#xff0c;间接提升开发效率。 为什么程序员不大写单测呢&#xff1f; 主要有如下原因&#…

fragment 调用activity方法,如dispatchKeyEvent,dispatchTouchEvent

以dispatchKeyEvent为例 1、创建回调接口FragmentKeyeventListener /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;13164716840163.com* 日期&#xff1a;2018/9/10 15*/ public interface FragmentKeyeventListener {boolean onFragmentKeyEvent(KeyEvent event)…

前端学习(2657):vue3实现计算器

第一步 引入ref 第二步 第三步

微信小程序map作为子组件wx.createMapContext失效

我是将map封装成了子组件进行使用&#xff0c;发现wx.createMapContext无论如何都没有效果。最后&#xff0c;定睛一看&#xff0c;原来将map放到子组件中&#xff0c;再使用wx.createMapContext需要增加额外的参数this 具体使用方法如下&#xff1a; const mapCtx wx.create…

小程序原生组件调用mpvue父组件方法

通过triggerEvent实现 1、小程序原生子组件 methods: {markertap () {console.log(子组件内部点击)this.triggerEvent(markertap)} }2、mpvue父组件 <marker-map id"marker-map" markertap"makertap"></marker-map>methods: {markertap () {…

昨晚通宵把服务器格式化,重新配置环境。

1.备份代码和数据 备份数据库用到命令&#xff1a;mysqldump -u 用户名 -p 数据库名 > 导出文件名 2.然后登录阿里云后台停止服务器&#xff0c;再格式化磁盘。 3.配置软件源 Ubuntu中软件更新的源服务器地址存储再/etc/apt/soures.list 每一行的开头是deb和deb-src&#xf…