Android新元件RecyclerView介紹,其效率更好
今天我們首先來說為什麼要介紹這個新元件RecyclerView,因為前幾天我釋出了一個常用面試題ListView的複用及如何優化的文章,介紹給一些開發者,但是我看到有關的反饋說:現在都不再用listview了,代替的是RecyclerView,確實是,但是用的畢竟是少數,所以可能很多人對於這個元件不是很瞭解,那麼我們就來介紹一下吧!
1、什麼是RecyclerView
RecyclerView 是 android-support-v7-21 版本中新增的一個 Widgets,官方對於它的介紹則是:RecyclerView 是 ListView 的升級版本,更加先進和靈活。
簡單來說就是:RecyclerView是一種新的檢視組,目標是為任何基於介面卡的檢視提供相似的渲染方式。它被作為ListView和GridView控制元件的繼承者,在最新的support-V7版本中提供支援。
2、用RecyclerView注意哪些方面,怎麼用
雖然RecyclerView充分考慮了它的擴充套件性,更好用,更靈活,但是用起來也有些麻煩。所以要使用RecyclerView,要好好考慮以下幾點:
(1)、RecyclerView.Adapter
(2)、LayoutManager
(3)、ItemAnimator
第一點:RecyclerView.Adapter
RecyclerView.Adapter包含了一種新型介面卡,其實與以前我們使用的介面卡基本類似,只是稍微有所不同,比如viewholder它幫我們封裝好了,不用像以前使用listview的介面卡一樣自己去寫viewholder了。所以它的效能比以前應該好了不少。廢話不多說了,介面卡例子如下:
package com.pandastudios.pandastudios.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.pandastudios.pandastudios.R;
import java.util.List;
/**
* Created by loonggg on 15/7/18.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> list;
/**
* 這裡和使用listview時使用的adapter基本一樣,都是要傳入資料集合的
*
* @param list
*/
public MyAdapter(List<String> list) {
this.list = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = View.inflate(viewGroup.getContext(), R.layout.rv_item, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.tv.setText(list.get(i));
}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.item_tv);
}
}
public void add(String item, int position) {
list.add(position, item);
notifyItemInserted(position);
}
public void remove(String item) {
int position = list.indexOf(item);
list.remove(position);
notifyItemRemoved(position);
}
}
第二點:LayoutManager
這個LayoutManager類決定檢視被放在畫面中哪個位置,但這只是它的眾多職責之一。它可以管理滾動和迴圈利用。LayoutManager只有一個叫做LinearLayoutManager的實現類,我們可以設定它的橫向和縱向。
第三點:ItemAnimator
ItemAnimator簡單來說是會根據介面卡上收到的相關通知去動畫的顯示元件的修改,新增和刪除等。它會自動新增和移除item的動畫。自帶的預設效果也不錯,已經非常好了。
3、RecyclerView優點和缺點
優點:
RecyclerView本身它是不關心檢視相關的問題的,由於ListView的緊耦合的問題,google的改進就是RecyclerView本身不參與任何檢視相關的問題。它不關心如何將子View放在合適的位置,也不關心如何分割這些子View,更不關心每個子View各自的外觀。更進一步來說就是RecyclerView它只負責回收和重用的工作,這也是它名字的由來。
所有關於佈局、繪製和其他相關的問題,也就是跟資料展示相關的所有問題,都被委派給了一些”外掛化”的類來處理。這使得RecyclerView的API變得非常靈活。你需要一個新的佈局麼?接入另一個LayoutManager就可以了!你想要不同的動畫麼?接入一個新的ItemAnimator就可以了,諸如此類等等。
缺點:
在RecyclerView中,沒有一個onItemClickListener方法。所以目前在介面卡中處理這樣的事件比較好。如果想要從介面卡上新增或移除條目,需要明確通知介面卡。這與先前的notifyDataSetChanged()方法稍微有些不同。具體操作在介面卡程式碼中就可以體現。
整體總結它的幾點如下:
Adapter:包裝資料集合並且為每個條目建立檢視。
ViewHolder:儲存用於顯示每個資料條目的子View。
LayoutManager:將每個條目的檢視放置於適當的位置。
ItemDecoration:在每個條目的檢視的周圍或上面繪製一些裝飾檢視。
ItemAnimator:在條目被新增、移除或者重排序時新增動畫效果。
原文連結:http://toutiao.com/a4741480788/?iid=2940446160&app=news_article&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_share
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!
相關文章
- RecyclerView 介紹 01View
- RecyclerView 介紹 02 – 重要概念View
- Android 應用程式元件介紹Android元件
- 更好的提高你的工作效率——IDEA的快捷鍵介紹 (轉)Idea
- Dynamics CRM 介紹兩款Chrome元件,用於提升開發效率Chrome元件
- Android RecyclerView 簡介與例項AndroidView
- React元件介紹React元件
- maven元件介紹Maven元件
- Git元件介紹Git元件
- clickhouse元件介紹元件
- Couchbase 介紹 - 更好的 Cache 系統
- Android四大元件之——BroadcastReceiver介紹Android元件AST
- Android新特性介紹,ConstraintLayout完全解析AndroidAI
- Redis元件介紹(一)Redis元件
- Redis元件介紹(二)Redis元件
- Redis元件介紹(三)Redis元件
- Redis元件介紹(四)Redis元件
- Redis元件介紹(五)Redis元件
- Redis元件介紹(六)Redis元件
- 5.Android(RecyclerView控制元件總結)AndroidView控制元件
- React 高階元件介紹React元件
- Aspose.word元件介紹元件
- swing元件介紹(1)元件
- Docker內部元件介紹Docker元件
- Blazor 元件庫 BootstrapBlazor 中Editor元件介紹Blazor元件boot
- Blazor Bootstrap 元件庫語音元件介紹Blazorboot元件
- android AsyncTask介紹Android
- Android開發--RecyclerView使用,看AndroidL新特性,android5.0新特性AndroidView
- vuejs元件庫pk介紹VueJS元件
- SpringCloud-常用元件介紹SpringGCCloud元件
- SAP Java Connector 元件介紹Java元件
- 大資料核心元件介紹大資料元件
- iOS 8 新特性介紹iOS
- Rails 4.0新特性介紹AI
- android 自定義控制元件 自定義屬性詳細介紹Android控制元件
- Bootstrap Blazor 元件介紹 Table (一)自動生成列功能介紹bootBlazor元件
- Bootstrap Blazor 元件介紹 Table (二)自定義模板列功能介紹bootBlazor元件
- Bootstrap Blazor 元件介紹 Table (三)列資料格式功能介紹bootBlazor元件