在Android與recyclerview中使用列表和網格

莫非有道發表於2018-01-19

1。Android和列表或網格 原文部落格地址:http://www.apkbus.com/blog-920677-76896.html 1.1。在Android中使用列表或網格 在列表或網格元素的顯示是移動應用的一個很常見的模式。 使用者看到的專案的集合,可以通過滾動的集合。 專案可以是一個列表,網格或另一種結構化的資料表示。 等活動所描繪的是一個。

image

使用者通過觸控事件或工具欄項的集合的相互作用。 個別專案可以選擇。 這個選擇可能更新工具欄或螢幕詳細基於觸發的選擇。 以下。

image

1.2。使用recyclerview 這個recyclerview類支援一系列的資料顯示。

這是一個現代版的ListView和GridView控制元件Android框架提供的類。 回收觀問題,現有部件的地址有幾個。 它執行的程式設計風格,產生了良好的效能。 它預設動畫去也。

recyclerview允許使用不同的佈局管理器定位專案。

回收檢視使用viewholder儲存引用的觀點來看,在回收一個條目。 viewholder類在介面卡持有相關觀點引用靜態內部類。 這些引用你的程式碼可以避免findviewbyid()用新的資料更新的部件的方法。

1.3。介面卡 一個介面卡管理資料模型和適應個別條目 擴充套件部件。recyclerview。介面卡階級和被分配到回收的觀點通過recyclerview.setadapter方法。輸入介面卡一個回收的 檢視可以是任意的java物件。 在此輸入介面卡總數必須歸還物品getitemcount()方法

介面卡準備專案的佈局,為每個單獨的資料元素充氣正確的佈局。 這工作了oncreateviewholder方法 它返回一個物件。viewholder每個視覺進入回收期。

這個例項是用於訪問在佈局檢視。 oncreateviewholder方法只叫新檢視必須建立。

在一個回收檢視每一個可見的入口充滿了正確的資料模型項的介面卡。 一旦資料項變得可見,介面卡將此資料個別部件他膨脹的早期工作。 這onbindviewholder方法

例如,在一個列表中的條目可能會在左側,兩行文字中,如下面的圖形描述的影象。

image

一個這樣的線可能看起來像下面的佈局檔案。

<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="6dip"
    android:contentDescription="TODO"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/secondLine"
    android:layout_width="fill_parent"
    android:layout_height="26dip"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@id/icon"
    android:ellipsize="marquee"
    android:maxLines="1"
    android:text="Description"
    android:textSize="12sp" />

<TextView
    android:id="@+id/firstLine"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/secondLine"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_alignWithParentIfMissing="true"
    android:layout_toRightOf="@id/icon"
    android:gravity="center_vertical"
    android:text="Example application"
    android:textSize="16sp" />
複製程式碼
1.4。Gradle依賴使用回收的觀點

這個recyclerview部件交付作為圖書館可以作為API 7級或更高。 新增一個依賴最新版本庫到你的搖籃,建立檔案使用。

dependencies { ... compile "com.android.support:recyclerview-v7:25.3.1" }

1.5。預設的佈局管理器 佈局管理器決定如何在資料recyclerview顯示。 回收檢視圖書館提供下列建設佈局。

linearlayoutmanager顯示垂直滾動列表或水平的專案。

gridlayoutmanager顯示在一個網格專案。

staggeredgridlayoutmanager顯示在一個網格專案。

1.6。有關實現類的使用recyclerview 實施recyclerview需要幾類來實現。 類最重要的列在下面

表1。重要的recyclerview API 類 目的 可選 介面卡 提供的資料,負責建立的個人參賽的意見 要求的 viewholder 包含所有的檢視的輸入資料填充的參考 要求的 佈局管理器 包含所有的檢視的輸入資料填充的參考 需要,但是預設的實現 itemdecoration 負責繪製裝飾在頂部或入口檢視容器 預設的行為,但可以被重寫 itemanimator 負責如果新增條目定義動畫,刪除或重新排序 預設的行為,但可以被重寫 你也可以為佈局管理器和動畫提供自定義實現。

1.7。在回收處理單擊事件的看法 觸控事件,如點選應該由回收的意見處理。 如果檢視應該引發一些物件在使用它(活動或片段),你可以通過建構函式的介面卡通過它。 這允許介面卡儲存物件的引用和呼叫它的方法。

1.8。在回收檢視佈局 介面卡需要為每個條目提供的檢視層次結構。 典型完成充氣的XML佈局。

這根的佈局是一個典型的ViewGroup(佈局管理器)和包含幾個其他的觀點。 下圖顯示列表佈局為奇數和偶數的不同了。

image

在getitemviewtype方法的回收期確定哪些型別應該用於資料 框架自動呼叫。oncreateviewholder如果這種型別的需要。 這個方法你佈置充氣正確的型別,並返回一個擬合的觀點。

1.9。自定義動畫 在“自定義動畫recyclerview,實現自己的動畫的擴充套件recyclerview.itemanimator類並使用recyclerview。setitemanimator()方法為它指定 你的外掛。

1.10。過濾和排序 過濾和排序是通過介面卡來處理。 你需要邏輯在自定義介面卡來實現。

1.11。在介面卡的資料更新 這個notifyiteminserted(位置)在介面卡的方法可以用來通知認為,一個新條目已插在某個位置。

這個notifyitemremoved(位置)方法可用於通知認為條目已在某個位置刪除。

1.12。對於recyclerview刷卡支援 這個itemtouchhelper類使刷卡解僱和拖放簡單實現。 實施ONMOVE拖放的方法和onswiped對核工業的支援。

看到[ recyclerview_swipe ]一個例項的實現。

2。練習:使用一個新的Android應用程式recyclerview 在這個練習中你建立了一個專案使用recyclerview類顯示一個列表。

image

2.1。建立專案並新增工具的依賴 建立一個新的Android專案使用com.vogella.android.recyclerview頂層包名。

新增以下依賴你的搖籃,構建檔案。

dependencies { ... compile "com.android.support:recyclerview-v7:25.3.1" }

2.2。建立佈局檔案

建立或更新配置檔案稱為activity_main.xml所以,它包含recyclerview

<!-- A RecyclerView with some commonly used attributes -->

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="12dp"
    android:layout_marginRight="12dp"
    android:elevation="2dp"
    android:src="@android:drawable/ic_menu_add" />
複製程式碼

相關文章