Android RecyclerView使用入門
RecyclerView使用入門
本文介紹RecyclerView的使用入門。這里給出一種比較常見的使用方式。
想必讀者朋友對列表的表現形式已經不再陌生。手機上有聯系人列表,文件列表,短信列表等等。
本文講述的是在Android開發中用RecyclerView來實現列表效果。
使用步驟
引入RecyclerView
在app的build.gradle文件中添加引用。我們使用的是androidx包。
dependencies { // ... implementation 'androidx.recyclerview:recyclerview:1.1.0' }
數據準備
先確定一下要顯示什么樣的數據。是用戶信息,聯系人,或是文件。這里以字符為例。
寫代碼前,我們先考慮一下需求,就是要如何顯示,怎么顯示數據。日常工作中,一般會有UI效果圖。本文中的美術設計就由我們自己發揮了。
比如顯示 a 97。
ViewHolder與layout
現在要顯示的數據已經確定了。來設計UI表現。layout與ViewHolder緊密相關。在設計Adapter類前,先寫ViewHolder類會比較好。
新建定義item(列表子項)的布局文件item_letter.xml。
這里使用內部類,把ViewHolder類寫在activity類里面。
private class VH extends RecyclerView.ViewHolder { TextView tv1; TextView tv2; public VH(@NonNull View itemView) { super(itemView); tv1 = itemView.findViewById(R.id.tv1); tv2 = itemView.findViewById(R.id.tv2); } }
從上面可以看出,ViewHolder和item的layout是緊密相關的。
layout里面的id寫的比較簡單。實際項目中可以給一些更有意義的id命名。
在activity的layout中,添加RecyclerView。
設計Adapter
設計一個適配器繼承自RecyclerView.Adapter
這里的VH是我們上面寫好的ViewHolder。
LetterAdapter中持有它自己的數據列表。需要實現3個方法。
onCreateViewHolder方法,要求返回VH對象。
這里就是創建VH對象并返回。而VH構造器要求傳入一個View,我們利用LayoutInflater創建一個view給它。當然,創建的根據就是前面設計好的item_letter。
onBindViewHolder是把數據交給對應的VH來顯示。
getItemCount方法要求返回數據的數量。
private class LetterAdapter extends RecyclerView.Adapter
粗心大意的時候,可能會忘記初始化adapter里的dataList。報一個null pointer異常。
設置RecyclerView
在Activity的onCreate方法里進行了初始化。
RecyclerView需要2項設置,適配器與LayoutManager。適配器就是我們上面定的那個。
LayoutManager這里用LinearLayoutManager,指定為垂直方向,這樣我們會得到一個上下滑動的列表。
List
觀察運行結果
運行到手機或者模擬器上,打開這個activity。有的朋友就發現,為啥屏幕里一個子項item就占滿了整個屏幕?
因為我們前面設置的item占滿屏幕。回到item_letter.xml,看一下根layout的設置。
把layout_height="match_parent"里的設置改為wrap_content。
重新編譯運行一下再看看結果。
也可以給根layout設置固定的高度。具體視美術設計和需求而定。
小結
到這里我們掌握了RecyclerView的基本使用方式。
接下來還要了解如何自定義它的表現形式。
例如點擊或長按item的反應;拖動調整順序,側滑刪除;item之間添加分割線;增/刪/改數據;使用瀑布流樣式等等。也可以查看滑動距離。
RecyclerView使用了適配器模式。
可以查看一個使用示例,顯示一列數據。如果要顯示不同類型的數據,這里有實現方式。
可以參考官方的RecyclerView文檔。
工程地址AndroidTutorial
更多請查看 https://www.an.rustfisher.com/
Android
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。