Room (三) RecyclerView 呈现列表数据

news/2024/5/19 5:27:36/文章来源:https://blog.csdn.net/u011193452/article/details/126666327

1. 用到的组件 Room,ViewModel,LiveData,Repository,AsyncTack

2. Module 中 build.gradle 文件中添加

dependencies {def room_version = "2.4.3"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"
}

3. 数据操作

  3.1 Word 实体类, Word.java

@Entity
public class Word {@PrimaryKey(autoGenerate = true)private int id; //主键@ColumnInfo(name = "english_word")private String word;@ColumnInfo(name = "chinese_meaning")private String chineseMeaning;public Word(String word, String chineseMeaning) {this.word = word;this.chineseMeaning = chineseMeaning;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getWord() {return word;}public void setWord(String word) {this.word = word;}public String getChineseMeaning() {return chineseMeaning;}public void setChineseMeaning(String chineseMeaning) {this.chineseMeaning = chineseMeaning;}
}

  3.2 实现 Database 接口, WordDao.java

@Dao //Database access object
public interface WordDao {@Insertvoid insertWords(Word... words);@Updatevoid updateWords(Word... words);@Deletevoid deleteWords(Word... words);@Query("DELETE FROM WORD")void deleteAllWords();@Query("SELECT * FROM WORD ORDER BY ID DESC")LiveData<List<Word>> getAllWordsLive();//List<Word> getAllWords();
}

  3.3 Database 管理操作数据库, WordDatabase.java

//singleton 只允许生成一个实例
@Database(entities = {Word.class}, version = 1, exportSchema = false)
public abstract class WordDatabase extends RoomDatabase {private static WordDatabase INSTANCE;//synchronized: 解决多个线程下调用,创建多个实例问题static synchronized WordDatabase getDatabase(Context context) {if (INSTANCE == null) {INSTANCE = Room.databaseBuilder(context.getApplicationContext(), WordDatabase.class, "word_database").build();}return INSTANCE;}public abstract WordDao getWordDao();
}

  3.4 Repository 操作数据库, WordRepository.java

//Repository 仓库 获取数据的意思
class WordRepository {private WordDao wordDao;private LiveData<List<Word>> allWordsLive;WordRepository(Context context) {WordDatabase wordDatabase = WordDatabase.getDatabase(context);wordDao = wordDatabase.getWordDao();allWordsLive = wordDao.getAllWordsLive();}LiveData<List<Word>> getAllWordsLive() {return allWordsLive;}void insertWords(Word... words) {new InsertAsyncTask(wordDao).execute(words);}void updateWords(Word... words) {new UpdateAsyncTask(wordDao).execute(words);}void deleteWords(Word... words) {new DeleteAsyncTask(wordDao).execute(words);}void deleteAllWords() {new DeleteAllAsyncTask(wordDao).execute();}static class InsertAsyncTask extends AsyncTask<Word, Void, Void> {private WordDao wordDao;InsertAsyncTask(WordDao wordDao) {this.wordDao = wordDao;}@Overrideprotected Void doInBackground(Word... words) {wordDao.insertWords(words);return null;}}static class UpdateAsyncTask extends AsyncTask<Word, Void, Void> {private WordDao wordDao;UpdateAsyncTask(WordDao wordDao) {this.wordDao = wordDao;}@Overrideprotected Void doInBackground(Word... words) {wordDao.updateWords(words);return null;}}static class DeleteAsyncTask extends AsyncTask<Word, Void, Void> {private WordDao wordDao;DeleteAsyncTask(WordDao wordDao) {this.wordDao = wordDao;}@Overrideprotected Void doInBackground(Word... words) {wordDao.deleteWords(words);return null;}}static class DeleteAllAsyncTask extends AsyncTask<Void, Void, Void> {private WordDao wordDao;DeleteAllAsyncTask(WordDao wordDao) {this.wordDao = wordDao;}@Overrideprotected Void doInBackground(Void... voids) {this.wordDao.deleteAllWords();return null;}}
}

4. 实现 ViewModel, WordViewModel.java

public class WordViewModel extends AndroidViewModel {private WordRepository wordRepository;public WordViewModel(@NonNull Application application) {super(application);wordRepository = new WordRepository(application);}public LiveData<List<Word>> getAllWordsLive() {return wordRepository.getAllWordsLive();}void insertWords(Word... words) {wordRepository.insertWords(words);}void updateWords(Word... words) {wordRepository.updateWords(words);}void deleteWords(Word... words) {wordRepository.deleteWords(words);}void deleteAllWords() {wordRepository.deleteAllWords();}
}

5. RecyclerView 的实现

  5.1 资源文件进入页面提示标志 ic_baseline_chevron_right_24.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="24dp"android:height="24dp"android:tint="@android:color/secondary_text_dark_nodisable"android:viewportWidth="24"android:viewportHeight="24"><pathandroid:fillColor="@android:color/white"android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z" />
</vector>

  5.2 列表子布局常规 item, cell_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="?attr/selectableItemBackground"android:clickable="true"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.1" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.85" /><TextViewandroid:id="@+id/tv_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView"android:textSize="16sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline3"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="1" /><TextViewandroid:id="@+id/tv_english"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="TextView"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/tv_chinese"app:layout_constraintStart_toStartOf="@+id/tv_chinese"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_chinese"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:text="TextView"android:textSize="18sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline4"app:layout_constraintHorizontal_bias="0.02"app:layout_constraintStart_toStartOf="@+id/guideline3"app:layout_constraintTop_toBottomOf="@+id/tv_english" /><ImageViewandroid:id="@+id/imageView2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline4"app:layout_constraintTop_toTopOf="parent"app:srcCompat="@drawable/ic_baseline_chevron_right_24" />
</androidx.constraintlayout.widget.ConstraintLayout>

  5.3 列表子布局 cardView item, cell_card.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:clickable="true"><androidx.cardview.widget.CardViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginTop="8dp"android:layout_marginEnd="8dp"android:foreground="?attr/selectableItemBackground"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:ignore="MissingConstraints"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tv_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView"android:textSize="16sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="1" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.1" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.85" /><TextViewandroid:id="@+id/tv_english"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="TextView"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/tv_chinese"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.02"app:layout_constraintStart_toStartOf="@+id/guideline5"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_chinese"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:text="TextView"android:textSize="18sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="@+id/tv_english"app:layout_constraintTop_toBottomOf="@+id/tv_english" /><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline6"app:layout_constraintTop_toTopOf="parent"app:srcCompat="@drawable/ic_baseline_chevron_right_24" /></androidx.constraintlayout.widget.ConstraintLayout></androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

  5.4 RecyclerView 内容管理器 Adapter, MyAdapter.java

//内容管理器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private List<Word> allWords = new ArrayList<>();private boolean useCardView;public void setAllWords(List<Word> allWords) {this.allWords = allWords;}public MyAdapter(boolean useCardView) {this.useCardView = useCardView;}@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());View itemView;if (useCardView) {itemView = layoutInflater.inflate(R.layout.cell_card, parent, false);} else {itemView = layoutInflater.inflate(R.layout.cell_normal, parent, false);}return new MyViewHolder(itemView);}@Overridepublic void onBindViewHolder(@NonNull MyViewHolder holder, int position) {Word word = allWords.get(position);holder.tvNumber.setText(String.valueOf(position + 1));holder.tvEnglish.setText(word.getWord());holder.tvChinese.setText(word.getChineseMeaning());holder.itemView.setOnClickListener(view -> {Uri uri = Uri.parse("https://m.youdao.com/m/result?lang=en&word=" + word.getWord());Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(uri);holder.itemView.getContext().startActivity(intent);});}@Overridepublic int getItemCount() {return allWords.size();}static class MyViewHolder extends RecyclerView.ViewHolder {TextView tvNumber, tvEnglish, tvChinese;public MyViewHolder(@NonNull View itemView) {super(itemView);tvNumber = itemView.findViewById(R.id.tv_number);tvEnglish = itemView.findViewById(R.id.tv_english);tvChinese = itemView.findViewById(R.id.tv_chinese);}}
}

6. 测试调用

  6.1 布局文件,activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.85" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="@+id/guideline2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/bt_clear"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Clear"app:layout_constraintBottom_toBottomOf="@+id/switch1"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/switch1"app:layout_constraintTop_toTopOf="@+id/switch1" /><Buttonandroid:id="@+id/bt_insert"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="insert"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/switch1"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline2" /><Switchandroid:id="@+id/switch1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:minHeight="48dp"android:text="CardView"app:layout_constraintBottom_toBottomOf="@+id/bt_insert"app:layout_constraintEnd_toStartOf="@+id/bt_clear"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/bt_insert"app:layout_constraintTop_toTopOf="@+id/bt_insert" /></androidx.constraintlayout.widget.ConstraintLayout>

  6.2 测试文件,MainActivity. java

public class MainActivity extends AppCompatActivity {Button btInsert, btClear;Switch aSwitch;WordViewModel viewModel;RecyclerView recyclerView;MyAdapter myAdapter1, myAdapter2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myAdapter1 = new MyAdapter(false);myAdapter2 = new MyAdapter(true);recyclerView = findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(this));recyclerView.setAdapter(myAdapter1);aSwitch = findViewById(R.id.switch1);aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean isChanged) {if (isChanged) {recyclerView.setAdapter(myAdapter2);} else {recyclerView.setAdapter(myAdapter1);}}});viewModel = new ViewModelProvider(this).get(WordViewModel.class);viewModel.getAllWordsLive().observe(this, new Observer<List<Word>>() {@Overridepublic void onChanged(List<Word> words) {myAdapter1.setAllWords(words);myAdapter1.notifyDataSetChanged();myAdapter2.setAllWords(words);myAdapter2.notifyDataSetChanged();}});View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.bt_insert:String[] english = {"Hello","World","Android","Google","Studio","Project","Database","Recycler","View","String","Value","Integer"};String[] chinese = {"你好","世界","安卓","谷歌","工作室","项目","数据库","回收站","视图","字符串","值","整数类型"};for (int i = 0; i < english.length; i++) {viewModel.insertWords(new Word(english[i], chinese[i]));}break;case R.id.bt_clear:viewModel.deleteAllWords();break;}}};btInsert = findViewById(R.id.bt_insert);btClear = findViewById(R.id.bt_clear);btInsert.setOnClickListener(listener);btClear.setOnClickListener(listener);}
}

7.效果图

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4944.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux操作系统】-- 多线程(三)-- 线程池+单例模式

目录 线程池 场景 代码实现 线程安全的单例模式 懒汉实现方式和懒汉实现方式 饿汉方式实现单例模式 懒汉方式实现单例模式 实战代码演练单例模式 线程池 在C中用户使用new/malloc都是向操作系统OS申请的&#xff0c;在系统的角度&#xff0c;就相当于new/malloc在底层封…

MySQL之临时表

写在前面 本文一起看下MySQL的临时表。 1&#xff1a;什么是临时表 通过create temporary table t语句创建的表&#xff0c;就是临时表&#xff0c;临时表的临时体现在其是其生命周期是和会话一样的&#xff0c;当会话结束&#xff0c;即连接关闭时MySQL会自动将创建的临时表…

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求 离子液体(ILs)&#xff0c;是完全由离子组成的液体&#xff0c;可以进一步定义为熔点低于100C的熔盐。 离子液体是在室温或接近室温下可呈现液体的液态有机盐。离子液体因具有一些优良的特性使其在分离…

树的直径 树形dp+2次dfs

题目描述 给定一棵树 T &#xff0c;树 T 上每个点都有一个权值。 定义一颗树的子链的大小为&#xff1a;这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 输入描述: 第一行输入一个 n,1≤n≤105。 接下来一行包含n个数&#xff0c;对于每个数 ai,−10^5…

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑&#xff0c;今天我们来看一看如何去设置标题、封面和剧情&#xff0c;实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨&#xff0c;把这样的脚本写出来&#xff0c;怎么样去做&#xff1f;你要把特效、悬…

PCL 生成空间圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 三维空间圆形式如下: 三维空间圆的参数方程: { x ( θ ) = c

蚂蚁核心架构师内部Java并发编程进阶笔记,白嫖简直太香了!

并发编程作为Java开发者很重要以及非常核心的知识&#xff0c;我希望读者朋友具备以下的预备知识&#xff1a; 希望你不是一个初学者线程安全问题,需要你接触过Java Web开发、Jdbc 开发、Web服务器、分布式框架时才会遇到基于JDK8 ,最好对函数式编程、lambda 有一定了解采用了…

thinkphp使用dompdf导出pdf(html转pdf)

目录一 、安装二、安装字体&#xff08;解决无法输出中文&#xff09;三、使用3.1 示例3.2 入参声明3.3 调用声明四、总结一 、安装 命令行安装&#xff1a; composer require dompdf/dompdf下载 GitHub Dompdf库 二、安装字体&#xff08;解决无法输出中文&#xff09; 因…

关于内存条的知识要点⑴

这些天在安装神州网信政府版的过程中&#xff0c;遇到很多计算机配置比较低&#xff0c;比如2009、2010、2012年的计算机&#xff0c;为了让用户使用顺畅一些&#xff0c;需要做一些硬件上的更改&#xff0c;比如加装内存条或者更换固态硬盘等。很多人即使是写代码的IT技术人员…

599. 两个列表的最小索引总和

599. 两个列表的最小索引总和https://leetcode.cn/problems/minimum-index-sum-of-two-lists/ 难度简单224 假设 Andy 和 Doris 想在晚餐时选择一家餐厅&#xff0c;并且他们都有一个表示最喜爱餐厅的列表&#xff0c;每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索…

计算机毕业论文选题java毕业设计软件基于SSM实现的固定资产管理系统

&#x1f345;文末获取联系&#x1f345; 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 计算机毕业设计java毕设之固定资产管理系统_哔哩哔哩_bilibili计算机毕业设计java毕设之固定资产管理系统共计2条视频&#xff0c;包括&#xff1a;IT实战营…

【文献研究】国际班轮航运的合作博弈:The coopetition game in international liner shipping

背景&#xff1a;本人在整理资料时翻找出来的以前做的研究自己写的总结&#xff0c;2017年发布在《Maritime Policy & Management》期刊的一篇关于国际班轮航运合作博弈的英文文献&#xff0c;本人本着学习的目的就文献的重点内容进行了浅层次的解读&#xff0c;就自己的理…

技术状态管理计划-模板

1 引言 1.1 目的和范围 本计划规定了XXX项目技术状态管理的原则、主要内容和要求&#xff0c;是指导XXX项目以及技术状态项研制全过程的技术状态管理的基本文件&#xff0c;也是各配套研制单位在研制过程中实施技术状态管理必须遵循的基本规定。   本计划适用于XXX项目以及技…

JdbcTemplate操作数据库

文章目录一、JdbcTemplate&#xff08;概念和准备&#xff09;1、什么是JdbcTemplate2、准备工作二、JdbcTemplate操作数据库(增删改)1、对应数据库创建实体类2、编写service和dao3、测试类三、JdbcTemplate操作数据库&#xff08;查询&#xff09;1、对应数据库创建实体类2、编…

物联网开发笔记(7)- 使用Wokwi仿真ESP32开发板实现LED灯点亮、按钮使用

上面几节我们使用Micrpython在Wokwi网站上实现了树莓派Pico开发板的仿真。学习了树莓派Pico的LED闪灯、按键操作等。以及Wokwi的使用&#xff0c;比如选中元器件后&#xff0c;按键盘“R”键切换方向&#xff0c;按键盘“Backspace”或者“Delete”删除原件&#xff0c;鼠标滚轮…

22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法

JVM入门 1、JVM结构图 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存 虚拟机栈(java栈)&#xff1a;虚拟机栈描述…

深挖全媒体多模态数据价值,蜜度亮相2022世界人工智能大会

蜜度深度挖掘全媒体多模态数据核心价值&#xff0c;提供重要垂直领域解决方案。 编辑 | 宋慧 出品 | CSDN云计算 2022 年 9 月1至3日&#xff0c;由国家七部委和上海市人民政府共同主办的2022世界人工智能大会&#xff08;WAIC )隆重举行&#xff0c;大会围绕“人类、科技、产…

Qt开发及建立工程

Qt开发 ​ 内容摘要&#xff1a;文章主要是为初学者介绍 Qt 框架的一些基本特性&#xff0c;主要内容包括: Qt的特点 , Qt中的模块划分 , Qt的安装 , Qt项目文件介绍 , Qt中的窗口类 , Qt窗口的坐标体系 , Qt框架的内存回收机制。 文章中除了关于知识点的文字描述&#xff0c;…

神经网络模式识别方法,神经网络模式识别代码

为什么Matlab神经网络里面会有聚类分析&#xff0c;模式识别&#xff0c;还有fitting tools&#xff0c;神经网络和聚类、模式有区别吗&#xff1f; 我的理解是神经网络可以用于预测&#xff0c;模式识别&#xff0c;聚类&#xff0c;fittingtools是MATLAB自带工具箱模式识别与…

安利一个查题功能的接口系统

安利一个查题功能的接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&…