Android中RecyclerView使用詳解(一)

目錄

    • 概述
    • 優點
    • 列表布局RecyclerView
      • 一、創建RecyclerView并且在布局中綁定
      • 二、實現RecyclerView單個item的布局
      • 三、給RecyclerView寫一個對應的適配器Adapter
        • 1.創建自定義的ViewHolder
        • 2.繼承Adapter,泛型使用我們自定義的ViewHolder
        • 3.重寫Adapter的三個方法
          • onCreateViewHolder
          • getItemCount
          • onBindViewHolder
      • 四、RecyclerView綁定布局和適配器
      • 五、RecyclerView單個item點擊事件
        • 1.創建監聽接口
        • 2.Activity中實現接口并且傳給Adapter
        • 3.綁定事件中監聽
        • 4.當點擊時,執行的是Activity中實現的方法

概述

RecyclerView 是 Android 開發中一個非常強大且靈活的組件,用于在有限的窗口中展示大量數據集。它提供了一種比傳統的 ListView 更高效的方式來滾動大量數據項。RecyclerView 不僅可以像 ListView 那樣垂直滾動,還可以水平滾動,甚至支持更復雜的布局,如網格布局(Grid Layout)、瀑布流布局(Staggered Grid Layout)。

優點

  • ViewHolder對視圖復用;
  • 可以垂直滾動和水平滾動;
  • 支持多種布局;

列表布局RecyclerView

今天實現一個簡單的RecyclerView,效果如下圖所示:

在這里插入圖片描述

一、創建RecyclerView并且在布局中綁定

   <androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rlv_1"android:layout_width="match_parent"android:layout_height="match_parent" />
 rlv1 = findViewById(R.id.rlv_1)

二、實現RecyclerView單個item的布局

```kotlin
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#cccccc"android:paddingTop="10dp"android:paddingBottom="10dp"android:paddingRight="20dp"android:paddingLeft="20dp"><ImageViewandroid:id="@+id/iv_icon"android:layout_width="50dp"android:layout_height="50dp"android:layout_marginRight="20dp"android:src="@drawable/fangyuan" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:text="小白"android:textColor="@color/black"android:textSize="16sp" /><TextViewandroid:id="@+id/tv_content"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="0dp"android:textSize="14sp"android:textColor="#666666"android:text="今天上班有摸魚嗎?"/></LinearLayout><TextViewandroid:id="@+id/tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="end"android:layout_marginTop="20dp"android:textColor="#999999"android:textSize="14sp"android:text="2024年7月9日"/></LinearLayout>

三、給RecyclerView寫一個對應的適配器Adapter

1.創建自定義的ViewHolder
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {var ivIcon: ImageView? = nullvar tvName: TextView? = nullvar tvContent: TextView? = nullvar tvTime: TextView? = nullinit {ivIcon = itemView.findViewById(R.id.iv_icon)tvName = itemView.findViewById(R.id.tv_name)tvContent = itemView.findViewById(R.id.tv_content)tvTime = itemView.findViewById(R.id.tv_time)}}
2.繼承Adapter,泛型使用我們自定義的ViewHolder
class MyAdapter(
): RecyclerView.Adapter<MyViewHolder>() {
}
3.重寫Adapter的三個方法
onCreateViewHolder

顧名思義,創建我們自定義ViewHolder的實例,也就是將item的布局作為itemView。ViewHolder是列表中每個item。
inflate,三個參數,
第一個為加載的布局id;第二個為該布局的外部是否嵌套一層父布局,不用就是null;第三個,是否給加載的布局添加一個root的外層容器。

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {val view = LayoutInflater.from(context).inflate(R.layout.item_list, parent, false)val myViewHolder = MyViewHolder(view)return myViewHolder}
getItemCount

item的條數

  override fun getItemCount(): Int {return nameList.size}
onBindViewHolder

通過onCreateViewHolder()綁定了布局之后,接下來對數據和布局里面的控件進行綁定。

   override fun onBindViewHolder(holder: MyViewHolder, position: Int) {holder.tvName?.text = nameList[position]holder.tvContent?.text = contentList[position]holder.tvTime?.text = timeList[position]}

四、RecyclerView綁定布局和適配器

   private fun initData() {val nameList = ArrayList<String>()val contentList = ArrayList<String>()val timeList = ArrayList<String>()for (i in 0..19) {nameList.add("方正")contentList.add("送外賣第${i}天")timeList.add("${1}${i + 1}日")}val adapter = MyAdapter(this,nameList,contentList,timeList)val manager = LinearLayoutManager(this)rlv1?.layoutManager = managerrlv1?.adapter = adapter}

至此,已經實現了開頭的列表效果。

五、RecyclerView單個item點擊事件

1.創建監聽接口
interface OnItemClickListener {fun onItemClick(position: Int)
}
2.Activity中實現接口并且傳給Adapter
3.綁定事件中監聽
holder.itemView.setOnClickListener{listener.onItemClick(position)}
4.當點擊時,執行的是Activity中實現的方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45276.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程安全(二)synchronized 的底層實現原理、鎖升級、對象的內存結構

目錄 一、基礎使用1.1 不加鎖的代碼實現1.2 加鎖的代碼實現二、實現原理2.1 synchronized 簡介2.2 對象監控器(Monitor)2.3 加鎖過程第一步:判斷 Owner 指向第二步:進入 EntryList 阻塞第三步:主動進入 WaitSet 等待三、鎖升級3.1 對象的內存結構3.2 Mark Word 對象頭3.3 …

MySQL sql_safe_updates參數

sql_safe_updates 是 MySQL 中的一個系統變量&#xff0c;用于控制 MySQL 服務器是否允許在沒有使用 KEY 或 LIMIT 子句的 UPDATE 或 DELETE 語句上執行更新或刪除操作。當這個變量被設置為 ON 時&#xff0c;MySQL 會拒絕那些可能影響到表中大量行的 UPDATE 或 DELETE 語句&am…

SpringBoot實戰:多表聯查

1. 保存和更新公寓信息 請求數據的結構 Schema(description "公寓信息") Data public class ApartmentSubmitVo extends ApartmentInfo {Schema(description"公寓配套id")private List<Long> facilityInfoIds;Schema(description"公寓標簽i…

LLM用于時序預測真的不行,連推理能力都沒用到

語言模型真的能用于時序預測嗎&#xff1f;根據貝特里奇頭條定律&#xff08;任何以問號結尾的新聞標題&#xff0c;都能夠用「不」來回答&#xff09;&#xff0c;答案應該是否定的。事實似乎也果然如此&#xff1a;強大如斯的 LLM 并不能很好地處理時序數據。 時序&#xff0…

tkinter-TinUI-xml實戰(11)多功能TinUIxml編輯器

引言 在TinUIXml簡易編輯器中&#xff0c;我們通過TinUI搭建了一個簡易的針對TinUIXml布局的編輯器&#xff0c;基本掌握了TinUIXml布局和TinUIXml的導入與導出。現在&#xff0c;就在此基礎上&#xff0c;對編輯器進行升級。 本次升級的功能&#xff1a; 更合理的xml編輯與…

docker私有倉庫harbor安裝

Harbor默認安裝 下載harbor https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz 目前要求docker版本&#xff0c;docker 20.10.10-ce &#xff0c;和docker-compose 1.18.0 查看 docker-compose版本 docker-compose --ver…

Django前后端打通

跨域問題 【 0 】前言 ? ? 同源策略&#xff08;Same Origin Policy&#xff09;是瀏覽器安全策略的重要組成部分&#xff0c;它限制了來自不同源的網頁之間的數據交互&#xff0c;以防止惡意攻擊。當一個網頁嘗試執行與它的源&#xff08;即協議、域名和端口&#xff09…

【區分vue2和vue3下的element UI Carousel 走馬燈組件,分別詳細介紹屬性,事件,方法如何使用,并舉例】

在 Vue 2 中&#xff0c;我們通常使用 Element UI&#xff0c;而在 Vue 3 中&#xff0c;我們則使用 Element Plus 作為其替代品。對于 Carousel 走馬燈組件&#xff0c;這兩個庫提供了相似的功能&#xff0c;但在 Vue 2 和 Vue 3 的上下文中&#xff0c;它們的屬性、事件和方法…

C\C++ 終端輸出帶有顏色的字符

終端顯示帶有顏色的字符 終端顯示帶有顏色的字符 終端顯示帶有顏色的字符背景&#xff1a;測試機器&#xff0c;win10系統&#xff0c; VS2022編寫字體設置不同的顏色背景色光標移動 &#xff08;這個用的估計不是很多&#xff09;字體設置動態顯示C cout 也可以測試代碼準確的…

接口基礎知識3:詳解url

課程大綱 一、定義 URL即訪問的鏈接&#xff0c;是Uniform Resource Locator的縮寫&#xff0c;譯為"統一資源定位符"。 URL是一種URI&#xff0c;它標識一個互聯網資源&#xff0c;并指定對其進行操作或獲取該資源的方法。可能通過對主要訪問手段的描述&#xff0c…

SpringBoot詳細解析

1.什么是springboot springboot也是spring公司開發的一款框架。為了簡化spring項目的初始化搭建的。那么spring對應springboot有什么缺點呢&#xff1f; spring項目搭建的缺點: 配置麻煩依賴tomcat啟動慢 2.springboot的特點 自動配置 Spring Boot的自動配置是一個運行時&…

Docker 安裝ros 使用rviz 等等圖形化程序

Docker 安裝ros 使用rviz 等等圖形化程序 ubuntu 版本與ros 發行版本對應 如何安裝其它版本ros 此時考慮使用docker 易于維護 地址&#xff1a; https://hub.docker.com/r/osrf/ros 我主機是 ubuntu22.04 使用這個標簽 melodic-desktop-full 1 clone 鏡像到本機 docker pu…

Android OkHttp3中HttpLoggingInterceptor使用

目錄 一 概述1.1 日志級別 二 使用2.1 引入依賴2.2 創建對象2.3 添加攔截器 三 結果展示3.1 日志級別為BODY3.2 日志級別為BASIC3.3 日志級別為HEADERS 參考 一 概述 HttpLoggingInterceptor是OkHttp3提供的攔截器&#xff0c;用來記錄HTTP請求和響應的詳細信息。 1.1 日志級…

基于IDEA的Lombok插件安裝及簡單使用

lombok介紹 Lombok能以注解形式來簡化java代碼&#xff0c;提高開發效率。開發中經常需要寫的javabean&#xff0c;都需要花時間去添加相應的getter/setter&#xff0c;也許還要去寫構造器、equals等方法&#xff0c;而且需要維護。而Lombok能通過注解的方式&#xff0c;在編譯…

Spring AOP 實現 Excel 導出統一處理

你好&#xff0c;我是柳岸花開。在實際開發中&#xff0c;經常會遇到需要導出 Excel 數據的需求。為了避免代碼重復&#xff0c;我們可以使用 Spring AOP&#xff08;面向切面編程&#xff09;來實現 Excel 導出的統一處理。本文將介紹如何使用 Spring AOP 在項目中統一處理 Ex…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(十三)-更換無人機控制器

引言 本文是3GPP TR 22.829 V17.1.0技術報告&#xff0c;專注于無人機&#xff08;UAV&#xff09;在3GPP系統中的增強支持。文章提出了多個無人機應用場景&#xff0c;分析了相應的能力要求&#xff0c;并建議了新的服務級別要求和關鍵性能指標&#xff08;KPIs&#xff09;。…

枚舉的高階用法之枚舉里寫方法以及注入spring的bean

1、前言 一般我們使用枚舉都是用來定義一些常量。比如我們需要一個表示訂單類(pc訂單、手機訂單)的常量,那我們就可以使用枚舉來實現,如下: AllArgsConstructor public enum OrderTypeEnum{PC("PC", "電腦端"),PHONE("PHONE", "手機端&quo…

[計網初識2]web的3個核心標準html,url,http

學習內容 HTML,URL,HTTP的構成 1.規范web的3個核心標準&#xff1f; HTML(Hyper Text Markup Language),規范網頁內容和版面布局的表示標準。URL(Uniform Resource Locator)&#xff0c;規范網頁識別符格式和含義的表示標準。HTTP(HyperText Transfer Protocl),規范游覽器如…

JIRA的高級搜索JIRA Query Language(JQL)詳解

JIRA的高級搜索功能非常強大&#xff0c;允許用戶通過JIRA Query Language&#xff08;JQL&#xff09;來構建復雜的查詢。以下是一些常用的高級搜索用法和示例&#xff1a; 1. 基本語法 JQL的基本語法包括字段、運算符和值的組合。例如&#xff1a; field operator value2.…

<數據集>UA-DETRAC車輛識別數據集<目標檢測>

數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;20500張 標注數量(xml文件個數)&#xff1a;20500 標注數量(txt文件個數)&#xff1a;20500 標注類別數&#xff1a;4 標注類別名稱&#xff1a;[car, van, others, bus] 序號類別名稱圖片數框數1car201871259342…