zoukankan      html  css  js  c++  java
  • ListView中的item中的Onclick事件的优化

    1. ListView的Adapter的优化布局载入器的载入次数最典型的使用方法是使用convertView进行优化,让convertView当做布局载入器的载体,也就是.重用 convertView
      用以避免反复创建 View。反复创建 View 代价较大,并且假设重用 view 不改变宽高,重用View能够降低又一次分配缓存造成的内存频繁分配/回收;
    2. convertView = LayoutInflater.from(context).inflate(R.layout.子布局, null)
    3. 避免在 getView 中有 反复调用的 findViewById findViewById 的实现是遍历。假设你定义的 View 越复杂代价越大。 Google 推荐的做法是用 ViewHolder,然后保存在 view 的 tag 中。

      如今 RecyclerView 也是强制使用 ViewHolder 了。

      findViewById由于Adapter中的getView方法运行好多次,所以须要优化,,那么典型的优化是是使用ViewHolder一说这个词你应该知道是如何优化(不会的问百度)
    4. 就是优化item中的点击事件,

      @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
    
            if (convertView == null) {
    
                holder = new ViewHolder();
    
                convertView = LinearLayout.inflate(R.layout.vlist, null);
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.info = (TextView) convertView.findViewById(R.id.info);
                holder.viewBtn = (Button) convertView.findViewById(R.id.view_btn);
    
                //使用convertView复用点击事件
                holder.title.setOnClickListener(holder);
                holder.info.setOnClickListener(holder);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
    
            //使用传递參数的形式给点击事件设置内容.
            //须要的话,就用addLIst传递过去须要的參数.
            holder.addList(position,context);
            holder.title.setText((String) mData.get(position).get("title"));
            holder.info.setText((String) mData.get(position).get("info"));
    
            return convertView;
        }
    }
    
    
    //提取出来方便点
    final class ViewHolder implements View.OnClickListener {
        public TextView title;
        public TextView info;
        public Button viewBtn;
        int mPosition;
        Context context;
    
        public void addList(int inPosition,Context context) {
            mPosition = inPosition;
            this.context = context;
        }
    
        @Override
        public void onClick(View v) {
            //写入item中的点击事件
            //...
            //v.getTag();
            switch (v.getId()){
                case R.id.title:
            Toast.makeText(context, "点击了title----"+mPosition, Toast.LENGTH_SHORT).show();
    
                    break;
                case R.id.info:
    
            Toast.makeText(context, "点击了info====>>"+mPosition, Toast.LENGTH_SHORT).show();
                    break;
    
            }
        }
    }

    5.这样也就避免的在getView中进行耗时操作有空在更,,菜鸟欢迎指点,一起探讨listView的优化,,

    6.就是让ListView在高速滑动的时候停止载入图片,有空补充.



  • 相关阅读:
    Fedora 19 配置参考
    Lua 函数、闭包、尾调用总结
    基于MFC简单图片裁剪工具
    【OpenGL 学习笔记04】顶点数组
    【OpenGL 学习笔记03】点画多边形
    【OpenGL 学习笔记02】宽点画线
    【OpenGL 学习笔记01】HelloWorld示例
    【SSH + BootStrap】实现的无线点餐系统
    【C++ 基础 11】 函数指针总结
    【C++基础 10】四种cast转换的区别
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7402381.html
Copyright © 2011-2022 走看看