ListView

添加新页面的步骤

  1. 在java包下对应子包中创建activity类
  2. 在layout包下创建对应的xml布局文件
  3. 在activity类中重写onCreate方法,并指定布局文件
  4. 在app/src/main/AndroidManifest.xml中添加声明
    完整写法:<activity android:name=“com.example.test.listview.ListViewActivity”>
    包名可以省略点保留,可以写作<activity android:name=".listview.ListViewActivity">

Context

  • Context是什么?
  1. Context是一个抽象类,其通用实现在ContextImpl类中。

  2. Context:是一个访问application环境全局信息的接口,通过它可以访问application的资源和相关的类,其主要功能如下:

    启动Activity
    启动和停止Service
    发送广播消息(Intent)
    注册广播消息(Intent)接收者
    可以访问APK中各种资源(如Resources和AssetManager等)
    可以访问Package的相关信息
    APK的各种权限管理

    从以上分析可以看出,Context就是一个对APK包无所不知的大管家,大家需要什么,直接问它就可以了。

  • Context与View的关系
    View与Context(或Activity)的关系类似于明星与经纪人的关系,所以创建View时,必须明确指定其Context(即经纪人或大管家),否则View就成不了明星。

  • 何时创建Context
    应用程序在以下几种情况下创建Context实例:

    1. 创建Application 对象时, 而且整个App共一个Application对象

    2. 创建Service对象时

    3. 创建Activity对象时
      这三个类就是Context的三大实现类。
      因此应用程序App共有的Context数目公式为:

    总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)

适配器

要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。
一般只要用BaseAdapter就行

ListView

  • ListView是一个列表控件。一个ListView通常有两个职责。

    (1)将数据填充到布局。

    (2)处理用户的选择点击等操作。

  • 一个ListView的创建需要3个元素。

    (1)ListView中的每一列的View。

    (2)填入View的数据或者图片等。

    (3)连接数据与ListView的适配器。

创建一个列表控件的步骤

  1. 在layout下创建xml布局文件
  • 常用属性:
  • listSelecter:设置布局样式,类似background
  • divider:设置子项分割线的颜色
  • dividerHeight:设置分割线的宽度
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/lv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:listSelector="@drawable/listview"
        android:divider="#0f0"
        android:dividerHeight="2dp">

    </ListView>
</LinearLayout>
  1. 创建适配器类MyListAdapter
package com.example.test.listview;

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 com.bumptech.glide.Glide;
import com.example.test.R;


public class MyListAdapter extends BaseAdapter {
    private Context context;
    private LayoutInflater layoutInflater;
    public MyListAdapter(Context context){
        //Activity是Context的子类,在哪个activity里调这个方法,传进来的就是谁
        this.context = context;
        //根据这个Context(activity)创建layoutInflater对象,用来获取布局文件对象
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    //列表长度
    public int getCount() {
        return 10;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }
    //这个内部类是用来保存视图中控件的引用,以免每次都要重新find,浪费性能
    static class ViewHolder{
        public ImageView imageView;
        public TextView tvTitle,tvTime,tvContent;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if (view == null) {
         //获取布局文件
            view = layoutInflater.inflate(R.layout.layout_listview,null);
            viewHolder = new ViewHolder();
            viewHolder.imageView = view.findViewById(R.id.iv);
            viewHolder.tvTitle = view.findViewById(R.id.tv_title);
            viewHolder.tvTime = view.findViewById(R.id.tv_time);
            viewHolder.tvContent = view.findViewById(R.id.tv_context);
            view.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.tvContent.setText("这是setText的文本");
        viewHolder.tvTime.setText("这是setText的文本");
        viewHolder.tvTitle.setText("这是setText的文本");
        Glide.with(context).load("").into(viewHolder.imageView);
        return view;
    }
}

layoutInflater.inflate的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById()的区别,inflate是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。

  1. 创建ListViewActivity类,并为每个列表项添加点击和长按效果
package com.example.test.listview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.example.test.R;

public class ListViewActivity extends Activity {
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview);
        listView = findViewById(R.id.lv1);
        //this表示当前对象,ListViewActivity.this这种写法一般用在内部类里,因为在外部类中直接可以用关键字this表示本类的对象,而内部类中直接写this的话表示的是内部类本身,想表示外部类的话就得加上外部类的类名.this。
        listView.setAdapter(new MyListAdapter(ListViewActivity.this));
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(ListViewActivity.this,"点击:"+i+"LONG:"+l,Toast.LENGTH_SHORT).show();
            }
        });
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(ListViewActivity.this,"长按:"+i+" long:"+l,Toast.LENGTH_SHORT).show();
                //return false表示后续监听器继续执行,这样触发了长按后点击事件还会触发,设为true后续就不会触发
                return true;
            }
        });
    }
}



【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)内容概要:本文介绍了加权多尺度字典学习模型(WMSDL)在轴承故障诊断中的应用,并提供了基于Matlab的代码实现。该模型结合多尺度分析与字典学习技术,能够有效提取轴承振动信号中的故障特征,提升故障识别精度。文档重点阐述了WMSDL模型的理论基础、算法流程及其在实际故障诊断中的实施步骤,展示了其相较于传统方法在特征表达能力和诊断准确性方面的优势。同时,文中还提及该资源属于一个涵盖多个科研方向的技术合集,包括智能优化算法、机器学习、信号处理、电力系统等多个领域的Matlab仿真案例。; 适合人群:具备一定信号处理和机器学习基础,从事机械故障诊断、工业自动化、智能制造等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握加权多尺度字典学习模型的基本原理与实现方法;②将其应用于旋转机械的轴承故障特征提取与智能诊断;③结合实际工程数据复现算法,提升故障诊断系统的准确性和鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注字典学习的训练过程与多尺度分解的实现细节,同时可参考文中提到的其他相关技术(如VMD、CNN、BILSTM等)进行对比实验与算法优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值