当前位置: 首页 > news >正文

学习Android的第十六天

目录

Android 自定义 Adapter

Adapter 接口

SpinnerAdapter

ListAdapter

BaseAdapter

自定义 BaseAdapter

参考文档

Android ListView 列表控件

ListView 的属性和方法

表头表尾分割线的设置

列表从底部开始显示 android:stackFromBottom

设置点击颜色 cacheColorHint

隐藏滑动条


Android 自定义 Adapter

在上一篇文章中我们知道了啥是 Adapter,也知道了 Adapter 的家族体系,也用过了几个Adapter。

本篇文章,我们就来自己实现一个 Adapter。

要实现自定义的 Adapter,通常继承自 BaseAdapter 类,并重写其中的方法来适配你的数据源。

首先,我们要做的就是要了解我们到底要重写哪些方法,因为 BaseAdapter 实现了 ListAdapter 和 SpinnerAdapter 接口,而这两个接口又继承自 Adapter

Adapter 接口

打开 Adapter API 文档,我们可以看到它有以下几个方法要实现

这些方法的说明如下:

  • int getCount(): 返回适配器中数据集的总数。
  • Object getItem(int position): 获取与数据集中指定位置关联的数据项。
  • long getItemId(int position): 获取与列表中指定位置关联的行 ID。
  • int getItemViewType(int position): 获取将由 getView(int, View, ViewGroup) 方法指定项目创建的视图类型。
  • View getView(int position, View convertView, ViewGroup parent): 获取显示数据集中指定位置的数据的视图。
  • int getViewTypeCount(): 返回将由其创建的视图类型的数量 getView(int, View, ViewGroup)。
  • boolean hasStableIds(): 项目 ID 在基础数据更改期间是否稳定。
  • boolean isEmpty(): 是否为空。
  • void registerDataSetObserver(DataSetObserver observer): 注册一个在此适配器使用的数据发生更改时调用的观察者。
  • unregisterDataSetObserver(DataSetObserver observer): 取消注册先前已通过此适配器注册的观察者  registerDataSetObserver(DataSetObserver)。

这些方法简要地描述了 Adapter 接口的功能,主要是用于获取数据项的数量、获取数据项本身以及与视图相关的操作。通过实现这些方法,可以创建自定义的适配器以满足特定的数据显示需求。

SpinnerAdapter

SpinnerAdapter 是用于在 Spinner(下拉框)中显示数据的接口。与其他 Adapter 不同的是,SpinnerAdapter 专门用于 Spinner 控件,因此只有一个公开方法:

  • View getDropDownView(int position, View convertView, ViewGroup parent): 根据下拉式弹出窗口中显示数据集中指定的位置获取数据的视图。

这个方法与 getView() 方法类似,但它专门用于在 Spinner 的下拉列表中显示数据项的视图。通常情况下,你会根据 position 参数来获取对应位置的数据项,并将其显示在一个视图中返回。需要注意的是,Spinner 在展开时会显示一个下拉列表,而这个方法返回的视图就是用于在下拉列表中显示的每个数据项的样式。

ListAdapter

ListAdapter 是用于在 ListView 中显示数据的接口,它有两个方法:

  • boolean areAllItemsEnabled(): 设置是否启用此适配器中的所有项目。如果所有的项目都是可用的,则返回 true;否则返回 false。当列表中的所有项都是可点击的时候,这个方法通常返回 true。
  • boolean isEnabled(int position): 判断指定位置上的项目是否启用。通常情况下,这个方法会根据列表中的每个项的状态来决定其是否可点击。如果指定位置上的项目是可用的(可以点击的),则返回 true;否则返回 false。

这两个方法主要用于控制 ListView 中每个项的可点击状态。

BaseAdapter

BaseAdapter 是 Android 中的一个抽象类,用于实现基本的适配器功能,通常用于在界面和数据之间进行数据绑定。

下面是对这些方法的简要说明:

  • boolean areAllItemsEnabled(): 判断是否启用了适配器中的所有项目。
  • CharSequence[] getAutofillOptions(): 获取可帮助 AutofillService 自动填充支持的视图的适配器数据的字符串表示形式。
  • View getDropDownView(int position, View convertView, ViewGroup parent): 根据下拉式弹出窗口中显示的数据集中指定的位置获取数据的视图。
  • int getItemViewType(int position): 获取由 getView(int, View, ViewGroup) 方法指定的项目创建的视图类型。
  • View getView(int position, View convertView, ViewGroup parent): 获取显示在数据集中指定位置的数据的视图。
  • boolean hasStableIds(): 在基础数据更改期间判断项目 id 是否稳定。
  • boolean isEmpty(): 判断适配器是否为空。
  • boolean isEnabled(int position): 判断指定位置上的项目是否启用。
  • void notifyDataSetChanged(): 通知附属的观察者,底层数据已被更改,任何反映数据集的视图都应该自行刷新。
  • void notifyDataSetInvalidated(): 通知所附的观察员,底层数据不再有效或可用。
  • void setAutofillOptions(CharSequence... options): 设置返回的值是由 getAutofillOptions() 方法返回的选项。
  • void registerDataSetObserver(DataSetObserver observer): 注册一个观察者,在适配器使用的数据发生更改时调用。
  • void unregisterDataSetObserver(DataSetObserver observer): 取消注册之前已经通过 registerDataSetObserver(DataSetObserver) 方法注册的观察者。

方法说明简单明了,主要就是获取数据项的数量和获取数据项,获取数据项的类型和视图。

现在我们看看我们要重写哪些方法

  1. 首先和监听器相关的都不用重写,因为暂时用不着,于是去掉

    1. notifyDataSetChanged()
    2. notifyDataSetInvalidated()
    3. registerDataSetObserver(DataSetObserver observer)
    4. registerDataSetObserver(DataSetObserver observer)
  2. 跟 自动填充 相关的也暂时用不着 (以后有机会介绍吧),于是去掉

    1. setAutofillOptions(CharSequence... options)
    2. getAutofillOptions()
  3. 有些方法可以有选择性的实现

    1. getDropDownView()
    2. areAllItemsEnabled()
    3. isEnabled()
    4. isEmpty()
    5. getItemViewType()
    6. getItemViewTypeCount()

好了,还剩下 4 个方法:

  • getView(int position, View convertView, ViewGroup parent): 这是一个最重要的方法,用于获取显示在数据集中指定位置的数据的视图。在这个方法中,你需要创建或者重用视图,并将数据绑定到视图上。
  • int getCount(): 这个方法返回数据集中的项目数量。在适配器中,你需要实现这个方法以提供数据集中项目的数量。
  • Object getItem(int position): 这个方法用于获取与数据集中指定位置关联的数据项。通常,你可以根据位置返回数据集中相应位置的对象。
  • long getItemId(int position): 这个方法用于获取与列表中指定位置关联的行 ID。一般来说,可以返回与该位置相关的数据项的唯一标识符,如果没有可以返回该位置。

这些方法是一个基本适配器必须实现的核心方法,它们用于将数据与视图进行绑定并确定数据的特征。

自定义 BaseAdapter

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>
package com.example.myapplication;import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 准备数据List<String> dataList = new ArrayList<>();dataList.add("项目 1:Java");dataList.add("项目 2:C#");dataList.add("项目 3:Python");dataList.add("项目 4:C++");dataList.add("项目 5:PHP");// 找到ListViewListView listView = findViewById(R.id.listView);// 创建适配器CustomAdapter adapter = new CustomAdapter(this, dataList);// 设置适配器listView.setAdapter(adapter);}// 自定义 BaseAdapterprivate static class CustomAdapter extends BaseAdapter {private List<String> mData;private LayoutInflater mInflater;// 构造函数public CustomAdapter(Context context, List<String> data) {mData = data;mInflater = LayoutInflater.from(context);}// 返回数据集的大小@Overridepublic int getCount() {return mData.size();}// 返回指定位置的数据项@Overridepublic String getItem(int position) {return mData.get(position);}// 返回指定位置的行ID@Overridepublic long getItemId(int position) {// 对于简单情况,我们返回位置作为IDreturn position;}// 返回指定位置的视图@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);holder = new ViewHolder();holder.textView = convertView.findViewById(android.R.id.text1);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}// 获取数据项并设置到TextView中String item = getItem(position);holder.textView.setText(item);return convertView;}// ViewHolder类,用于优化列表项的视图static class ViewHolder {TextView textView;}}
}

在这个示例中,我们创建了一个自定义的 CustomAdapter 类,继承自 BaseAdapter,并实现了其中的四个核心方法:getCount()、getItem()、getItemId() 和 getView()。同时,在 MainActivity 中,我们实例化了 CustomAdapter 并将其设置给了 ListView。 

 运行结果:

参考文档

  1. Android 官方 BaseAdapter

Android ListView 列表控件

关于 ListView ,其实 Android Adapter 适配器 和 Android 自定义 Adapter 都有已经使用过好几次了,我们这里就不再讲解基本的使用了。

ListView 的属性和方法

ListView 的常用属性:

  • android:footerDividersEnabled: 是否在 footerView(表尾)前绘制一个分隔条,默认为 true。
  • android:headerDividersEnabled: 是否在 headerView(表头)前绘制一个分隔条,默认为 true。
  • android:divider: 设置分隔条,可以用颜色分割,也可以用 drawable 资源分割。
  • android:dividerHeight: 设置分隔条的高度。
  • android:entries: ListView 要显示的数据资源,在 Android Adapter 适配器中我们有用到过。

这些属性可以用来定制 ListView 的外观和分隔线的显示。

至于方法,ListView 提供了很多与表头表尾分隔线相关的方法,但是我们在日常开发中常用的方法并不太多,通常使用的方法包括 setAdapter() 用于设置适配器,以及一些用于监听事件的方法,比如 setOnItemClickListener() 用于设置列表项的点击事件监听器。

表头表尾分割线的设置

ListView 没有直接设置表头和表尾的属性,但是你可以通过编程的方式在 Java 代码中设置表头和表尾。方法 addHeaderView(View v) 和 addFooterView(View v) 就是用来实现这个目的的。

这些方法允许你在 ListView 中添加表头和表尾的视图,其中 addHeaderView(View v) 方法用于添加表头,而 addFooterView(View v) 方法用于添加表尾。你可以传入一个自定义的 View 对象作为表头或表尾的内容。

此外,如果需要进一步控制表头或表尾的交互,可以使用重载的方法 addHeaderView(View v, Object data, boolean isSelectable) 和 addFooterView(View v, Object data, boolean isSelectable),其中 isSelectable 参数用于指定表头或表尾是否可以被选中。

记住,如果你使用了 addHeaderView() 方法,你必须在调用 setAdapter() 方法之前添加表头,否则会出现错误。这是因为添加表头必须在设置适配器之前完成。

例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>
package com.example.myapplication;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 准备数据List<String> dataList = new ArrayList<>();dataList.add("项目 1:Java");dataList.add("项目 2:C#");dataList.add("项目 3:Python");dataList.add("项目 4:C++");dataList.add("项目 5:PHP");// 找到ListViewListView listView = findViewById(R.id.listView);// 创建适配器ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);// 添加表头// 注意:addHeaderView() 必须在 setAdapter() 之前调用// 如果表头不需要被选中,最后一个参数可以传入 false// 如果需要被选中,则传入 truelistView.addHeaderView(createHeaderView(), null, false);// 添加表尾// 同样,addFooterView() 也必须在 setAdapter() 之前调用listView.addFooterView(createFooterView(), null, false);// 设置适配器listView.setAdapter(adapter);}// 创建表头的视图private View createHeaderView() {TextView headerView = new TextView(this);headerView.setText("表头视图");// 设置表头样式,比如背景色、文字大小等headerView.setBackgroundColor(Color.BLUE); // 设置背景色为蓝色headerView.setTextColor(Color.WHITE); // 设置文字颜色为白色headerView.setTextSize(18); // 设置文字大小为 18spreturn headerView;}// 创建表尾的视图private View createFooterView() {TextView footerView = new TextView(this);footerView.setText("表尾视图");// 设置表尾样式,比如背景色、文字大小等footerView.setBackgroundColor(Color.GREEN); // 设置背景色为绿色footerView.setTextColor(Color.WHITE); // 设置文字颜色为白色footerView.setTextSize(18); // 设置文字大小为 18spreturn footerView;}
}

列表从底部开始显示 android:stackFromBottom

android:stackFromBottom="true" 是一个用于 ListView 的布局属性,用于设置列表从底部开始显示。

当设置为 true 时,ListView 将会从底部开始显示列表项,即最后一个列表项会显示在列表的底部,而第一个列表项会显示在列表的顶部。

下面是一个示例 XML 布局文件,演示如何使用 android:stackFromBottom="true" 属性:

<ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:stackFromBottom="true" />

设置点击颜色 cacheColorHint

android:cacheColorHint 是一个用于 ListView 的属性,用于设置当滚动或点击时,背景色的缓存色。

默认情况下,ListView 在滚动时会绘制一个缓存位图来加速滚动的过程。而这个缓存位图的背景色默认是黑色。当你将一个有背景的 ListView 放在一个有颜色的背景上时,当你滚动 ListView 时,滚动过程中的空白部分会暴露出背景色,此时就会看到黑色背景,给人一种不连续的感觉。

通过设置 android:cacheColorHint 属性为透明色,即 #00000000,可以解决这个问题。这样,在滚动或点击时,空白部分就会显示成透明色,与背景融合,不会再出现黑色背景。

下面是一个示例 XML 布局文件,演示如何使用 android:cacheColorHint 属性:

<ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/listview_background"android:cacheColorHint="#00000000" />

隐藏滑动条

可以通过设置 android:scrollbars 属性为 none 来隐藏 ListView 的滚动条,也可以通过调用 setVerticalScrollBarEnabled(false) 来达到同样的效果。

1、使用 XML 属性 android:scrollbars="none":

<ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="none" />

2、使用 Java 代码 setVerticalScrollBarEnabled(false):

ListView listView = findViewById(R.id.listView);
listView.setVerticalScrollBarEnabled(false);

相关文章:

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…...

若依项目改造

ctrlalt l 格式化项目 alt f6 修改包和import包名 替换com.ruoyi 为 com.cj 替换若依版本为自己的版本 将ruoyi改成自己项目的英文名 修改中文名字 修改文件包名 修改有ruoyi的类名 &#xff1a; 验证码生成器包名修改&#xff1a;...

相机图像质量研究(34)常见问题总结:图像处理对成像的影响--拖影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

算法学习系列(三十五):贪心(杂)

目录 引言一、合并果子&#xff08;Huffman树&#xff09;二、排队打水&#xff08;排序不等式&#xff09;三、货仓选址&#xff08;绝对值不等式&#xff09;四、耍杂技的牛&#xff08;推公式&#xff09; 引言 上一篇文章也说过了这个贪心问题没有一个规范的套路和模板&am…...

嵌入式面试:瑞芯微

文章目录 一、2024 秋招1.1 IIC的速率范围 &#xff1a;1.2 linux驱动子系统汇总 &#xff1a;1.3 linux关抢占情况汇总 &#xff1a;1.4 操作或者读写一个文件时&#xff0c;从用户态到内核态再到物理介质的流程(考点&#xff1a;虚拟文件系统) &#xff1a; 一、2024 秋招 1…...

【性能测试】分布式压测之locust和Jmeter的使用

受限于单台机器的配置问题&#xff0c;我们在单台机器上达不到一个很高的压测并发数&#xff0c;那这个时候就需要引入分布式压测 分布式压测原理&#xff1a; 一般通过局域网把不同测试计算机链接到一起&#xff0c;达到测试共享、分散操作、集中管理的目的。 选择一台作为…...

ABC341A-D题解

文章目录 A题目AC Code&#xff1a; B题目AC Code&#xff1a; C题目AC Code&#xff1a; D题目你以为这就完了&#xff1f; 时间复杂度分析&#xff1a;AC Code&#xff1a; E A 题目 这个没什么好说的&#xff0c;就先输出一个 1&#xff0c;再输出 n n n 个 01就大功告成…...

计算机网络——07协议层次及服务模型

协议层次及服务模型 协议层次 网络是一个复杂的系统 网络功能复杂&#xff1a;数字信号的物理信号承载、点到点、路由、rdt、进程区分、应用等现实来看&#xff0c;网络的许多构成元素和设备&#xff1a; 主机路由器各种媒体的链路应用协议硬件&#xff0c;软件 问题是&am…...

Netty Review - NIO空轮询及Netty的解决方案源码分析

文章目录 Pre问题说明NIO CodeNetty是如何解决的&#xff1f;源码分析入口源码分析selectCntselectRebuildSelector Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty Review - 服务端channel注册流程源码解析 问题说明 N…...

PAM | 账户安全 | 管理

PAM PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插入式身份验证模块&#xff09;是一个灵活的身份验证系统&#xff0c;允许我们通过配置和组合各种模块来实现不同的身份验证策略。 在 Linux 或类 Unix 系统中&#xff0c;常见的 PAM 模块包括以下几种类…...

Leetcode 16-20题

最接近的三数之和 给定整数数组和目标值target&#xff0c;从数组中选出三个整数&#xff0c;使得和与target最接近&#xff0c;并返回三数之和。保证恰好存在一个解。 和上一题类似&#xff0c;我们先对整数数组排序&#xff0c;然后固定i&#xff0c;枚举j&#xff0c;找到满…...

【开源训练数据集1】神经语言程式(NLP)项目的15 个开源训练数据集

一个聊天机器人需要大量的训练数据,以便在无需人工干预的情况下快速解决用户的询问。然而,聊天机器人开发的主要瓶颈是获取现实的、面向任务的对话数据来训练这些基于机器学习的系统。 我们整理了训练聊天机器人所需的对话数据集,包括问答数据、客户支持数据、对话数据和多…...

【AIGC】Stable Diffusion的ControlNet参数入门

Stable Diffusion 中的 ControlNet 是一种用于控制图像生成过程的技术&#xff0c;它可以指导模型生成特定风格、内容或属性的图像。下面是关于 ControlNet 的界面参数的详细解释&#xff1a; 低显存模式 是一种在深度学习任务中用于处理显存受限设备的技术。在这种模式下&am…...

静态curl库编译与使用(c++)

静态curl库编译与使用 静态curl库编译与使用&#xff1a;mingw https://curl.se/windows/ // 测试&#xff1a;设置URL地址 // curl_easy_setopt(curlHandle, CURLOPT_URL, “https://ipinfo.io/json”); // curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 0L); // c…...

element 表单提交图片(表单上传图片)

文章目录 使用场景页面效果前端代码 使用场景 vue2 element 表单提交图片   1.点击【上传图片】按钮择本地图片&#xff08;只能选择一张图片&#xff09;后。   2.点击图片&#xff0c;支持放大查看。   3.点击【保存】按钮&#xff0c;提交表单。 页面效果 前端代码…...

Android 15 第一个开发者预览版

点击查看&#xff1a;first-developer-preview-android15 点击查看&#xff1a;Get Android 15 2024年2月16日,谷歌发布 Android 15 第一个开发者预览版 翻译 由工程副总裁戴夫伯克发布 今天&#xff0c;我们发布了Android 15的首个开发者预览版&#xff0c;这样我们的开发者就…...

anomalib1.0学习纪实-续1:增加新算法

0、基本信息 现在我要增加一个新算法&#xff1a;DDAD 他的代码&#xff0c;可以在github中找到&#xff1a;GitHub - arimousa/DDAD 一、基础操作&#xff1a; 1、修改anomalib\src\anomalib\models\__init__.py 我增加的第33行和61行&#xff0c; 2、 增加ddad文件夹和文…...

Java+Vue+MySQL,国产动漫网站全栈升级

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

机器人常用传感器分类及一般性要求

机器人传感器的分类 传感技术是先进机器人的三大要素&#xff08;感知、决策和动作&#xff09;之一。根据用途不同&#xff0c;机器人传感器可以分为两大类&#xff1a;用于检测机器人自身状态的内部传感器和用于检测机器人相关环境参数的外部传感器。 内部传感器 内部传感…...

C++-opencv的imread、imshow、waitkey、namedWindow

在C中使用OpenCV时&#xff0c;imread和imshow是两个非常基础且常用的函数&#xff0c;用于读取图像和显示图像。以下是这两个函数的简要说明和如何一起使用它们的示例。 imread函数 imread用于从指定的文件路径读取图像。它将图像读入为cv::Mat对象&#xff0c;这是OpenCV中…...

开源语音识别faster-whisper部署教程

1. 资源下载 源码地址 模型下载地址&#xff1a; large-v3模型&#xff1a;https://huggingface.co/Systran/faster-whisper-large-v3/tree/main large-v2模型&#xff1a;https://huggingface.co/guillaumekln/faster-whisper-large-v2/tree/main large-v2模型&#xff1a;…...

使用IntelliJ IDEA配置Maven (入门)

在使用IntelliJ IDEA进行Java开发时&#xff0c;配置Maven是至关重要的一步&#xff0c;因为它可以帮助你管理项目的依赖和构建过程。以下是我在使用IntelliJ IDEA配置Maven的实践过程&#xff0c;以及一些技术笔记和职场感悟。 工作实践与项目复盘 下载Maven&#xff1a; 访问…...

汽车金融市场研究:预计2029年将达到482亿美元

汽车金融公司作为汽车流通产业链的重要一环&#xff0c;认真贯彻落实国家有关政策&#xff0c;采取多种措施助力汽车产业发展&#xff0c;为促进推动汽车消费、助力畅通汽车产业链、支持稳定宏观经济大盘发挥了积极作用。 益于国内疫情得到有效控制&#xff0c;我国经济持续稳定…...

关于举办第十五届蓝桥杯大赛电子赛5G全网规划与建设赛项的通知

关于举办第十五届蓝桥杯大赛电子赛 5G全网规划与建设赛项的通知 各相关院校&#xff1a; 第十五届蓝桥杯大赛通知已于2023年9月27日在蓝桥杯大赛官网发布&#xff0c;现就电子赛5G全网规划与建设赛项报名事宜&#xff0c;公布如下&#xff1a; 一、赛项概述 5G全网规划与建设…...

Vue3快速上手(七) ref和reactive对比

一、ref和reactive对比 表格形式更加直观吧&#xff1a; 项目refreactive是否支持基本类型支持不支持是否支持对象类型支持支持对象类型是否支持属性直接赋值不支持&#xff0c;需要.value支持是否支持直接重新分配对象支持&#xff0c;因为操作的.value不支持&#xff0c;需…...

8、内网安全-横向移动RDPKerberos攻击SPN扫描WinRMWinRS

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正 目录 一、域横向移动-RDP-明文&NTLM 1.探针服务&#xff1a; 2.探针连接&#xff1a; 3.连接执行&#xff1a; 二、域横向移动-WinRM&WinRS-明文&NTLM 1.探针可用&#xff1a; 2.连接…...

《数据结构与算法之美》读书笔记

《数据结构与算法之美》读书笔记 写在前面 这本书的大部分内容比较浅显&#xff0c;因此只挑DSAA课程上没有涉及或没有深入讨论的点总结 第二章 数组相关 提高传统数组插入/删除数据效率的方法&#xff1a; 如果插入的数据不要求有序&#xff0c;可以直接把某位的原数据替换…...

C语言—字符数组(3)

可能不是那么的完整&#xff0c;先凑合看吧&#xff0c;如果我学会如何修改以后&#xff0c;我慢慢回来修改的 1.编写程序实现对两个字符串的连接功能&#xff1b; 法一:不使用strcat函数,写程序直接实现&#xff0c;记得添加结束符&#xff0c;不然程序访问数组时候将变得不…...

linux 实用技能

1.查看系统版本 cat /etc/redhat-release cat /etc/redhat-release 2. 查看磁盘实用情况 df du 3.查看内存 top -Hp 2214 4. 网络配置 vi /etc/hostname vi /etc/hosts vi /etc/sysconfig/network-scripts/ifcfgens33 6. sed ‘s/a/b/g’ aaa.txt 替换 7. scp …...

【maya 入门笔记】基本视图和拓扑

1. 界面布局 先看基本窗口布局&#xff0c;基本窗口情况如下&#xff1a; 就基本窗口布局的情况来看&#xff0c;某种意义上跟blender更像一点&#xff08;与3ds max相比&#xff09;。 那么有朋友就说了&#xff0c;玛格基&#xff0c;那blender最下面的时间轴哪里去了&…...

IO 流分类

一、File File 类&#xff08;磁盘操作&#xff09;可以用于表示文件和目录的信息&#xff0c;但是它不表示文件的内容。递归地列出一个目录下所有文件&#xff1a; public static void listAllFiles(File dir) {if (dir null || !dir.exists()) {return;}if (dir.isFile())…...

JVM的主要组成部分,以及它们的作用。JVM中的内存区域有哪些,它们各自的作用是什么?什么是Java的堆内存,它如何影响程序的性能?

JVM的主要组成部分&#xff0c;以及它们的作用 JVM&#xff08;Java虚拟机&#xff09;的主要组成部分包括类加载器&#xff08;Class Loader&#xff09;、运行时数据区&#xff08;Runtime Data Area&#xff09;、执行引擎&#xff08;Execution Engine&#xff09;、本地库…...

Qt QWidget以及各种控件、布局 核心属性(适合入门使用时查询)

目录 1. QWidget核心属性 2. 按钮类控件 2.1 PushButton 核心属性 2.2 RadioButton 核心属性 2.3 CheckBox 和 Tool Button 核心属性 3. 显示类控件 3.1 Label 核心属性 3.2 LCDNumber 核心属性 3.3 ProgressBar 核心属性 3.4 Calendar Widget 核心属性 4. 输入类控…...

svg图片构造QGraphicsSvgItem对象耗时很长的问题解决

目录 1. 问题的提出 2. 问题解决 1. 问题的提出 今天通过一张像素为141 * 214&#xff0c;大小为426KB的svg格式的图片构造QGraphicsSvgItem对象&#xff0c;再通过Qt的Graphics View Framework框架&#xff0c;将QGraphicsSvgItem对象显示到场景视图上&#xff0c;代码如下&…...

边坡位移监测设备:守护工程安全的前沿科技

随着现代工程建设的飞速发展&#xff0c;边坡位移监测作为预防山体滑坡、泥石流等自然灾害的重要手段&#xff0c;日益受到人们的关注。边坡位移监测设备作为这一领域的关键技术&#xff0c;以其高精度、实时监测的特点&#xff0c;成为守护工程安全的重要武器。 一、边坡位移…...

Qt使用单例模式读取xml文件

Qt使用单例模式读取xml文件 一、单例模式介绍1、什么是单例模式2、为什么使用单例模式3、什么情况下使用单例模式4、使用单例模式需要注意哪些问题线程安全 5、单例模式的类型6、单例类的特点 2、单例模式的实现2.1懒汉式2.2饿汉式 一、单例模式介绍 1、什么是单例模式 单例模…...

备战蓝桥杯 Day6(学习动态规划)

引入 支付问题 假设有无限多的硬币&#xff0c;硬币面值为1,5,11。现在需要支付15元&#xff0c;问最少使用的硬币数&#xff1f; 贪心策略&#xff1a;1511*11*4&#xff0c;145 真正的答案153*5 3 dp的两个性质 最优子结构无后效性 dp的两大要素 1.状态2.状态转移方程 思路…...

【uniapp】自定义步骤条样式

代码实现 <view class"steps-wrap"><view class"flex-box"><view class"number active-number">1</view><view class"desc active-desc">步骤1</view><view :class"[line, activeStep …...

UE5 C++ UObject实例化

一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面&#xff0c;先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类&#xff0c;允许设计者指定伤害类型…...

Appium环境安装与架构介绍

Appium架构 Appium 设计哲学 不需要为了自动化而重新编译或修改被测应用不应该让移动端自动化测试限定在某种语言或者某个具体的框架不要为了移动端的自动化测试而重新造轮子移动端自动化测试应该是开源的 Appium 架构 Appium 架构图如下&#xff1a; Appium 的核心是一个 …...

Vue+Vite项目初建(axios+Unocss+iconify)

一. 创建项目 npx --package vue/cli vue 项目成功启动后&#xff0c;进入http://localhost:3200&#xff0c;即可进入创建好的页面(假设启动端口为3200) 二. 测试网络通讯模块 假设有本地服务器地址localhost:8000提供接口服务&#xff0c;接口为localhost:8000/token&#…...

ASUS华硕枪神8笔记本电脑G614JIR,G814JVR,G634JYR,G834JZR工厂模式出厂Windows11系统 带重置还原功能

适用ROG枪神8系列笔记本型号&#xff1a; G614JIR、G614JVR、G634JYR、G634JZR G814JIR、G814JVR、G834JYR、G834JZR 链接&#xff1a;https://pan.baidu.com/s/1tYZt6XFNC2d6YmwTbtFN7A?pwd3kp8 提取码&#xff1a;3kp8 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主…...

Python入门:常用模块—xml模块

xml是实现不同语言或程序之间进行数据交换的协议&#xff0c;跟json差不多&#xff0c;但json使用起来更简单 xml的格式如下&#xff0c;就是通过<>节点来区别数据结构的: <data> <country name"Liechtenstein"> <rank updated"yes"…...

蓝队应急响应工具箱v2024.1​

1 蓝队工具箱 v2024.1 2 简介 蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集&#xff0c;由真实应急响应环境所用到的工具进行总结打包而来&#xff0c;由 ChinaRan404,W 啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包&#xff0c;并实…...

Linux中获取字符串长度与获取子字符串

一、 获取字符串长度 #!/bin/bash string"jobs" echo ${string} # 输出结果: jobs echo ${#string} # 输出结果: 4 二、提取子字符串 以下实例从字符串第 2 个字符开始截取 4 个字符&#xff1a; #!/bin/bash str"敢于亮剑决不后退" echo ${str:2:…...

Rust语言之sha-256爆破

文章目录 一、实现Sha-256加密1.创建项目2.编写Cargo.toml文件3.编写程序代码 二、sha256爆破1.获取命令行参数2.读取文件3.校验输入参数4.暴力破解 一、实现Sha-256加密 SHA-256是一种安全哈希算法&#xff0c;主要特点是将输入的数据&#xff08;无论长度&#xff09;通过特定…...

Rust中的字符串处理及相关方法详解

在Rust中&#xff0c;字符串是一种非常重要的数据类型&#xff0c;而String类型则提供了对动态可变字符串的支持。本文将介绍一些常见的字符串处理方法以及相关示例代码。 创建字符串 在Rust中&#xff0c;有多种方式创建字符串&#xff0c;以下是一些常见的例子&#xff1a;…...

NS安装-CentOS服务器安装Nightscout CGM

NS CGM 安装必要条件 有自己的云服务器好像没有2&#xff0c;有云服务器就行了 安装顺序 先安装数据库&#xff0c;目前支持的是 MongoDB &#xff0c;官方推荐4&#xff0c;其实目前最新版本就行。可以用宝塔安装&#xff0c;比较简单克隆代码&#xff0c;我是放到 /opt/ns…...

利用ChatGPT提升工作效率

随着科技的飞速发展&#xff0c;人工智能逐渐成为我们生活的一部分。ChatGPT作为一种先进的自然语言处理技术&#xff0c;已经在各个领域取得了显著的成果。本文将探讨如何利用ChatGPT提升工作效率&#xff0c;让我们的生活变得更加便捷。 一、什么是ChatGPT&#xff1f; ChatG…...

django admin页面美化

美化 Django Admin 页面可以通过多种方式实现&#xff0c;从简单的 CSS 样式调整到完全自定义模板。以下是一些建议和步骤来美化 Django Admin 页面&#xff1a; 1. 使用 CSS 覆盖默认样式 这是最简单的方法&#xff0c;你可以通过添加自定义 CSS 文件来覆盖 Django Admin 的…...