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在高速滑动的时候停止载入图片,有空补充.



posted on   slgkaifa  阅读(531)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示