1. 程式人生 > >封裝RecycleView的 RecyclerView.Adapter的方式

封裝RecycleView的 RecyclerView.Adapter的方式

目錄

一、BaseQuickAdapter的寫法

public abstract class BaseQuickAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {


  public BaseQuickAdapter(Context context, int layoutResID, List<T> data) {
        mContext = context;
        this.mLayoutResID = layoutResID;
        this.data = data;
    }

    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final BaseViewHolder holder;
        final View itemView = LayoutInflater.from(mContext).inflate(mLayoutResID, parent, false);
        holder = new BaseViewHolder(itemView);
        return holder;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {
        convert(holder, mData.get(position));
    }

     abstract void  convert(BaseViewHolder holder, T item);

}

1.1 用法:

在自己的Adapter中放置佈局,以後只需要實現convert抽象方法即可;

public class MovieQuickAdapter extends BaseQuickAdapter<MovieEntity.SubjectsBean> {
    private Context mContext;

    public MovieQuickAdapter(Context context, List<MovieEntity.SubjectsBean> data) {
        super(context, R.layout.rcv_item, data);
        mContext = context;
    }

    @Override
    protected void convert(BaseViewHolder holder, MovieEntity.SubjectsBean item) {
        //set TextView
        holder.setText(R.id.title, "片名:" + item.getTitle())
                .setText(R.id.score, "評分:" + item.getRating().getAverage())
                .setText(R.id.director, "導演:" + item.getDirectors().get(0).getName())
                .setText(R.id.actor, "主演:" + item.getCasts().get(0).getName())
                .setText(R.id.type, "型別:" + item.getGenres().toString())
                .setText(R.id.year, "年份:" + item.getYear())
                .setText(R.id.tv_num, holder.getLayoutPosition() + "");
        //setImageView
        Glide.with(mContext).load(item.getImages().getMedium()).into((ImageView) holder.getView(R.id.iv));
    }
}

二、BaseViewHolder的寫法

public class BaseViewHolder extends RecyclerView.ViewHolder {

    private final SparseArray<View> views;
    private View convertView;


    public BaseViewHolder(View itemView) {
        super(itemView);
        this.views = new SparseArray<>();
        convertView = itemView;
    }

    //根據id檢索獲得該View物件
    private <T extends View> T retrieveView(int viewId) {
        View view = views.get(viewId);
        if (view == null) {
            view = convertView.findViewById(viewId);
            views.put(viewId, view);
        }
        return (T) view;
    }

    public BaseViewHolder setText(int viewId, CharSequence charSequence) {
        TextView textView = retrieveView(viewId);
        textView.setText(charSequence);
        return this;
    }

    public View getView(int viewId) {
        return retrieveView(viewId);
    }

}

程式碼下載路徑:

相關推薦

封裝RecycleViewRecyclerView.Adapter方式

目錄 一、BaseQuickAdapter的寫法 public abstract class BaseQuickAdapter<T> extends RecyclerView.Adapter<BaseViewHolder>

基於 Multitype 開源庫封裝更好用的RecyclerView.Adapter

前言 MultiType 這個專案,至今 v3.x 穩定多時,考慮得非常多,但也做得非常剋制。原則一直是 直觀、靈活、可靠、簡單純粹(其中直觀和靈活是非常看重的)。 這是 MultiType 框架作者給出的專案簡述。 作為一個 RecyclerView 的 Adapter 框架,感覺這專案的設

封裝RecyclerView Adapter 實現可新增多個header和footer,可設定loadingView,低耦合的多種佈局。

多種佈局的recyclerview的普通寫法是重寫RecyclerView.Adapter的getItemViewType返回不同position上的type,在onCreateViewHolder(ViewGroup parent,int viewType

Android RecyclerView Adapter及Holder的封裝【原創】

專案中使用到了橫向的ListView樣子的功能,一開始使用Gallery做,由於Gallery的自帶彈性功能,效果不理想,於是使用網上的一些開源的橫向ListView,但是效果很卡, 最後使用了v7包中的RecyclerView,初次使用,不太熟練,對其進行了簡單的封裝

RecyclerView Adapter 優雅封裝,一個Adapter搞定所有列表

專案中,我們用得最多的元素就是列表了,在Android 中,實現列表用原生的RecyclerView就能滿足需求,關於RecyclerView 的基礎使用這裡不做過多的介紹,網上有太多的博文介紹了。本篇文章將介紹自己封裝的一個Adapter,幫你快速高效的新增一個列表(包

RecyclerView.Adapter結合ButterKnife封裝

public class BaseViewHolder extends RecyclerView.ViewHolder { View mView ; public BaseViewHo

RecyclerView Adapter簡單封裝

前言        今天是新年第一天,本來打算在上一年的最後一天寫下來的,但是由於玩的時間長了一點,所以今天才寫,算是在新的一年開一個好頭,新年新氣象嘛!        至於為什麼要寫這個文章吶!由於專案中以前都是用ListView實現的列表,很多東西都已經

Android 對封裝RecyclerView.Adapter講解

首先先得知RecyclerView.Adapter有什麼方法,這樣才知道與ListView的BaseAdapter有什麼區別: public class MyAdapter extends RecyclerView.Adapter { @Over

SP的封裝(數據持久化方式一)

存儲 etl xml文件 ava lang mini mode content xtend 1.先看一段描述: Interface for accessing and modifying preference data returned by Context.getShar

RecycleView呼叫adapter的notifyDataSetChanged()只能顯示一行資料

專案中用到RecycleView,在使用的過程中發現介面重新整理永遠只能顯示第一行,看了一兩個小時都沒有找到原因,後來在CSDN上發現了一篇部落格,完美的解決了這個問題,感謝博主,記錄一下,以免以後再次遇到。 https://blog.csdn.net/fantasiasango/article/

ajax非同步請求以及Jquery框架封裝的非同步請求方式

一、AJAX - 阿賈克斯 1、什麼是AJAX? Asynchronous Javascript And Xml 是可以建立快速動態網頁的技術。可以實現非同步更新,而不需要載入整個網頁,只加載需要更 新某部分網頁。

裝飾模式應用 為RecyclerView.Adapter新增上拉載入更多

這個包裝類主要有兩個關鍵點: 第一個是列表尾部新增一個條目,用於顯示各種載入的狀態,就是添加了一個特殊型別的holder。 第二個是監控列表滾動,滾動到我們新增的那個holder的時候,觸發我們需要的操作,比如修改holder裡的狀態文字等。 注意問題: 以前做過兩一個實

Struts2框架的資料封裝一之屬性封裝(屬性封裝的第二種方式封裝成javaBean)

Struts2中提供了兩類資料封裝的方式? 第一種方式:屬性驅動(有兩種方式:一個對屬性,另外一個是將引數封裝到javaBean中)   B. 在頁面上,使用OGNL表示式進行資料封裝。(將引數封裝到javaBean中)     * 在頁面中使用OGNL表示式進行資料的封裝,就可以直接把屬性封

Struts2框架的數據封裝一之屬性封裝(屬性封裝的第二種方式封裝成javaBean)

ava width ace exceptio override efault cut domain demo Struts2中提供了兩類數據封裝的方式? 第一種方式:屬性驅動(有兩種方式:一個對屬性,另外一個是將參數封裝到javaBean中)   B. 在頁面上,使用

RecyclerView.Adapter介面卡通用化改造

RecyclerView 是谷歌給開發者的福利,比以往的ListView更加強大,效能更大,具體原始碼分析,我們下次講。本篇主要介紹如何在專案中提煉程式碼,增強它的適配性。下面就介紹我的思路。 首先一般編碼有如下幾個問題。 1.列表資料,需要寫一個RecyclerView.Adapter

繼承RecyclerView.Adapter使用泛型遇到的問題

轉自:http://my.oschina.net/buobao/blog/651007 在使用RecyclerView的時候遇到了一個很坑的問題,記錄這個大坑! 首先,在使用RecyclerView.Adapter的時候定義了一個BaseListAdapter,程式碼如下:

Android封裝多條目Adapter,方便快捷,便於維護

專案地址 :https://github.com/chaychan/MultipleItemRvAdapter 效果圖,我之前做過的精仿今日頭條,新聞列表中有好幾種佈局: Apk下載地址         請點選左下角“閱讀原文”對應位置下載。   Mul

ButterKnife結合RecyclerView.Adapter一起使用

直接上程式碼: @Override public MainHodler onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(pare

RecyclerView.Adapter優化了嗎?

昨天寫了一篇「還在用ListView?」講的內容是RecyclerView的使用技巧以及一些常用的開源庫,有朋友反饋“我已經在用recyclerview了”,那麼如何讓它更好用呢?此時我想到了優化RecyclerView.Adapter,因為在Recycl

Writing a RecyclerView Adapter in Kotlin (KAD 16)

An interesting way to see how Kotlin simplifies your life is by creating a RecyclerView Adapter. You’ll see that the code can be organized in such a