Android入門教程 | RecyclerView使用入門
想必大家對列表的表現形式已經不再陌生。手機上有聯絡人列表,檔案列表,簡訊列表等等。 本文講述的是在 Android 開發中用 RecyclerView 來實現列表效果。
使用步驟
引入RecyclerView
在 app 的 build.gradle 檔案中新增引用。我們使用的是 androidx 包。
gradle:
dependencies { // ... implementation 'androidx.recyclerview:recyclerview:1.1.0' }
資料準備
先確定一下要顯示什麼樣的資料。是使用者資訊,聯絡人,或是檔案。這裡以字元為例。 寫程式碼前,我們先考慮一下需求,就是要如何顯示,怎麼顯示資料。日常工作中,一般會有 UI 效果圖。而本文中的美術設計就由我們自己發揮了。
比如顯示
a
和
97
。
ViewHolder 與 layout
現在要顯示的資料已經確定了。來設計UI表現。layout與 ViewHolder 緊密相關。在設計 Adapter 類前,先寫 ViewHolder 類會比較好。
新建定義 item(列表子項)的佈局檔案
item_letter.xml
。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" /> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" /> </LinearLayout>
這裡使用內部類,把 ViewHolder 類寫在 Activity 類裡面。
建立VH類
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。
layout 中新增 RecyclerView
<androidx.recyclerview.widget.RecyclerView android:id="@+id/re_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
設計 Adapter
設計一個介面卡繼承自
RecyclerView.Adapter<VH>
。
這裡的
VH
是我們上面寫好的 ViewHolder。
LetterAdapter
中持有它自己的資料列表。需要實現3個方法。
-
onCreateViewHolder
方法,要求返回VH物件。- 這裡就是建立VH物件並返回。而VH構造器要求傳入一個View,我們利用
LayoutInflater
建立一個view給它。當然,建立的根據就是前面設計好的item_letter
。
- 這裡就是建立VH物件並返回。而VH構造器要求傳入一個View,我們利用
-
onBindViewHolder
是把資料交給對應的VH來顯示。 -
getItemCount
方法要求返回資料的數量。
LetterAdapter:
private class LetterAdapter extends RecyclerView.Adapter<VH> { private List<Character> dataList; public LetterAdapter(List<Character> dataList) { this.dataList = dataList; } @NonNull @Override public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_letter, parent, false)); } @Override public void onBindViewHolder(@NonNull VH holder, int position) { Character c = dataList.get(position); holder.tv1.setText(c.toString()); holder.tv2.setText(String.valueOf(Integer.valueOf(c))); } @Override public int getItemCount() { return dataList.size(); } }
粗心大意的時候,可能會忘記初始化 adapter 裡的 dataList。會報一個
null pointer
異常。
設定 RecyclerView
在 Activity 的 onCreate 方法裡進行了初始化。
RecyclerView需要2項設定,介面卡與
LayoutManager。介面卡就是我們上面定的那個。 LayoutManager這裡用
LinearLayoutManager
,指定為垂直方向,這樣我們會得到一個上下滑動的列表。
使用 LinearLayoutManager
List<Character> characterList = new ArrayList<>(); for (char c = 'a'; c <= 'z'; c++) { characterList.add(c); } mLetterAdapter = new LetterAdapter(characterList); RecyclerView letterReView = findViewById(R.id.re_view); letterReView.setAdapter(mLetterAdapter); letterReView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));` </pre></details>
觀察執行結果
執行到手機或者模擬器上,開啟這個activity。有的朋友就發現,為啥螢幕裡一個子項item就佔滿了整個螢幕?
因為我們前面設定的item佔滿螢幕。回到
item_letter.xml
,看一下根layout的設定。 把
layout_height="match_parent"
裡的設定改為
wrap_content
。 重新編譯執行一下再看看結果。
我們也可以給根 layout 設定固定的高度。具體視美術設計和需求而定。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70008155/viewspace-2840990/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android入門教程 | RecyclerView實際使用AndroidView
- Android入門教程 | RecyclerView響應子項點選AndroidView
- Android入門教程 | Kotlin協程入門AndroidKotlin
- Android入門教程 | EditText 使用者輸入Android
- Android入門教程 | AsyncTask 使用介紹Android
- Android入門教程 | DialogFragment 的使用AndroidFragment
- 【Android開發入門教程】三.Activity入門指南!Android
- Realm for Android快速入門教程Android
- Android SQLite快速入門教程AndroidSQLite
- Android WorkManager使用入門Android
- 新手入門,webpack入門詳細教程Web
- Charles(Windows/Android)入門使用WindowsAndroid
- Iptables入門教程
- vue入門教程Vue
- Redux入門教程Redux
- Electron入門教程
- Aseprite入門教程
- Twisted 入門 教程
- flask入門教程Flask
- Maven入門教程Maven
- awk 入門教程
- HBase入門教程
- Jmeter入門教程JMeter
- Elasticsearch入門教程Elasticsearch
- SnapKit入門教程APK
- Tmux入門教程UX
- Docker 入門教程Docker
- Thrift 入門教程
- Vuex入門教程Vue
- CMake入門教程
- RabbitMQ入門教程MQ
- mybatis入門教程MyBatis
- Git入門教程Git
- docker入門教程Docker
- tcpdump教程入門TCP
- Circos入門教程
- Vim入門教程
- OpenStack 入門教程