android 开发关于ListView的基础用法(主观理解)

博客介绍了使用ListView需做到的三点,包括创建item的xml文件、创建数据适配器、准备数据。第一点可自主设计,着重讲解了后两点,如重写适配器类、给数据分类等,强调使用ListView过程较为麻烦。
<ListView
        android:id="@+id/count_list_bigger"
        android:layout_below="@+id/money"
        android:layout_above="@+id/bottom_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

看起来超级简单呢,其实贼吉尔麻烦。

要用ListView应该做到的三点:

  1. 创建item的xml文件,用于显示每条item长啥样。
  2. 创建数据适配器,用于连接数据和ListView, 其中对getView函数的重写尤为重要,待会详细讲解
  3. 最后当然是数据啦,这个数据可以直接赋值给数组,也可以从数据库中获取。

第一点略过不讲,这个自主设计即可。

讲讲第二第三点。

首先你得重写适配器类 - -劝退了萌新的我有没有!

public class MyAdapter extends BaseAdapter {

    public List<Data> mList;//我把数据列表放在适配器里了
    public Context mContext;//不用管它
    public LayoutInflater mLayoutInflater;//可以理解为给你的listView装数据的打气筒

    public MyAdapter(Context context){//初始化一哈
        mList = new ArrayList<>();
        getDatabase();
        mContext = context;
        mLayoutInflater = 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) {
        ViewHolder viewHolder;
        if (convertView==null) {
            viewHolder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.count_item_bigger, null);
            viewHolder.date = convertView.findViewById(R.id.date);
            viewHolder.totalMoney = convertView.findViewById(R.id.total_money);
            viewHolder.name = convertView.findViewById(R.id.name);
            viewHolder.type = convertView.findViewById(R.id.type);
            viewHolder.money = convertView.findViewById(R.id.money);
            viewHolder.time = convertView.findViewById(R.id.time);
            viewHolder.date_bar = convertView.findViewById(R.id.date_bar);
            convertView.setTag(viewHolder);//保存缓存数据,优化作用
        }else{
            viewHolder= (ViewHolder) convertView.getTag();//读取缓存数据
        }
        //拉取你数组中的当前position位置的数据
        Data data = mList.get(position);

        //这个if else特定项目代码,别看
        if(data.getDate().equals("") && data.getTotal_money().equals("")){
            viewHolder.date_bar.setVisibility(View.GONE);
        }
        else {
            viewHolder.date.setText(data.getDate());
            viewHolder.totalMoney.setText(data.getTotal_money());
        }
        //这个也是
        if(!data.getDate().equals("")){//不设置这个,回拉的话会错误的消除日期栏,我也不知道为什么orz
            viewHolder.date_bar.setVisibility(View.VISIBLE);
        }
        //给你的控件显示东西啦
        viewHolder.name.setText(data.getName());
        viewHolder.type.setText(data.getType());
        viewHolder.money.setText(data.getMoney());
        viewHolder.time.setText(data.getTime());


        return convertView;
    }
    //优化作用
    private static class ViewHolder{
        public TextView date;
        public TextView totalMoney;
        public TextView name;
        public TextView type;
        public TextView money;
        public TextView time;
        public LinearLayout date_bar;
    }
    //这个里面可以给你列表添加数据,可以手动添加,也可以从数据库读取,我举个栗子添加一条
    private void getDatabase(){
        Data data = new Data("今天", "+10000.00", "家教", "收入", "+1000.00", "15:00");
        mList.add(data);
    }
}

创建适配器

listBigger =  findViewById(R.id.count_list_bigger);//找到你的listView
MyAdapter adapter = new MyAdapter(this);//把你创建一个你重写适配器的对象
listBigger.setAdapter(adapter);//赋值

然后得给你的数据分出个类

public class Data {
    private String date;
    private String total_money;
    private String name;
    private String type;
    private String money;
    private String time;

    public Data(String data, String total_money, String name, String type, String money, String time){
        this.date = data;
        this.total_money = total_money;
        this.name = name;
        this.type = type;
        this.money = money;
        this.time = time;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTotal_money() {
        return total_money;
    }

    public void setTotal_money(String total_money) {
        this.total_money = total_money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getMoney() {
        return money;
    }

    public void setMoney(String money) {
        this.money = money;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}

然后就可以啦!

真tm麻烦呢orz

内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合与前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性与系统可靠性。此外,文章指出BEV模型落地面临大算力依赖与高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注与长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性与经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理和技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构与数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型与算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析与系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑与数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值