BaseAdapter的使用与优化

BaseAdapter的使用与优化

本文是基于慕课网eclipse_xu老师讲解
Android必学-BaseAdapter的使用与优化
,自己做的整理笔记,在此感谢老师和慕课网的分享,视频链接如下: http://www.imooc.com/learn/365

标签(空格分隔): BaseAdapter Android 慕课网


数据适配器模式的应用:
1. 降低程序耦合性
2.容易扩展

1.ListView的缓存机制

需要才显示,显示完就被会受到缓存

2.BaseAdapter的逗比式

  • BaseAdapter基本结构
    • public int getCount() : 适配器中数据集中数据的个数
    • public Object getItem(int position) : 获取数据集中与指定索引对应的数据项
    • public long getItemId(int position) : 获取指定行对应的ID
    • public View getView(int position,View convertView,ViewGroup parent) : 获取每一个Item的显示内容

ItemBean.java

package com.excavator.baseadapter;

/**
 * 项目名称:BaseAdapter
 * 类描述:
 * 创建人:admin
 * 创建时间:2015/5/14 21:13
 * 修改人:admin
 * 修改时间:2015/5/14 21:13
 * 修改备注:
 */
public class ItemBean {
    public int ItemImageResid;
    public String ItemTitle;
    public String ItemContent;

    public ItemBean(int itemImageResid, String itemTitle, String itemContent) {
        ItemImageResid = itemImageResid;
        ItemTitle = itemTitle;
        ItemContent = itemContent;
    }
}

MainActivity.java:

package com.excavator.baseadapter;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        List<ItemBean> itemBeanList = new ArrayList<>();
        for (int i=0;i<20;i++){
            itemBeanList.add(new ItemBean(
                    R.mipmap.ic_launcher,
                    "我是标题"+i,
                    "我是内容"+i));
        }
        ListView listView = (ListView) findViewById(R.id.lv_main);
        listView.setAdapter(new MyAdapter(this,itemBeanList));
    }
}

MyAdapter.java:

package com.excavator.baseadapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * 项目名称:BaseAdapter
 * 类描述:
 * 创建人:admin
 * 创建时间:2015/5/14 21:21
 * 修改人:admin
 * 修改时间:2015/5/14 21:21
 * 修改备注:
 */
public class MyAdapter extends BaseAdapter {

    private List<ItemBean> mList;
    private LayoutInflater mInflater;

    //数据源与适配器关联
    public MyAdapter(Context context,List<ItemBean> list) {
        mList = list;
        //context : 要使用当前Adapter的界面对象
        //mInflater :布局加载器对象
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    //返回每一项的现实内容
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //逗比式 没有任何优化处理,每次都创建新的View,设置控件 效率极其低下
        View view = mInflater.inflate(R.layout.item, null);
        ImageView imageView = (ImageView) view.findViewById(R.id.iv_image);
        TextView title = (TextView) view.findViewById(R.id.tv_title);
        TextView content = (TextView) view.findViewById(R.id.tv_content);
        ItemBean bean = mList.get(position);
        imageView.setImageResource(bean.ItemImageResid);
        title.setText(bean.ItemTitle);
        content.setText(bean.ItemContent);

        return view;
    }
}

3.BaseAdapter普通式

//普通式 利用了ListView的缓存特性,如果没有缓存才创建新的View 但findViewById依然会浪费大量时间
        if (convertView==null) {
            convertView = mInflater.inflate(R.layout.item, null);
        }
        ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_image);
        TextView title = (TextView) convertView.findViewById(R.id.tv_title);
        TextView content = (TextView) convertView.findViewById(R.id.tv_content);
        ItemBean bean = mList.get(position);
        imageView.setImageResource(bean.ItemImageResid);
        title.setText(bean.ItemTitle);
        content.setText(bean.ItemContent);
        return convertView;

4.BaseAdapter文艺式

创建内部类ViewHolder

//创建内部类ViewHolder
    class ViewHolder  {
        public ImageView imageView;
        public TextView title;
        public TextView content;
    }
        //文艺式 不仅利用了ListView的缓冲,更通过ViewHolder类来实现显示数据的视图的缓存,避免多次通过findViewById寻找控件
        ViewHolder viewHolder;
        //判断convertView是否为空
        if (convertView==null) {
            viewHolder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.item, null);
            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_image);
            viewHolder.title = (TextView) convertView.findViewById(R.id.tv_title);
            viewHolder.content = (TextView) convertView.findViewById(R.id.tv_content);
            //通过setTag将ViewHolder与convertView绑定
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        ItemBean bean = mList.get(position);
        viewHolder.imageView.setImageResource(bean.ItemImageResid);
        viewHolder.title.setText(bean.ItemTitle);
        viewHolder.content.setText(bean.ItemContent);

        return convertView;

总结:
ViewHolder优化BaseAdapter思路

  • 创建Bean对象,用于封装数据
  • 在构造方法中初始化用于映射的数据List
  • 创建ViewHolder类,创建布局映射关系
  • 判断convertView,为空则创建,并设置Tag,否则通过Tag来取出ViewHolder
  • 给ViewHolder中的控件设置数据
需求响应动态冰蓄冷系统需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值