SuperRecycler,大數據列表,極簡,快速顯示

前言

android 列表,4萬數據,也能快速顯示java

開發android 應用的時候,數據列表,使用率特別高。android

寫列表的時候,就得寫適配器,挺煩人的。雖然網上有萬能適配器。數組

可是做爲一個效率高的人(懶人),重複的事情是毫無成長價值可言的。bash

因此就有了,快速可使用的列表的想法ide


後來,我接手更改別人作的項目。遇到一個好恐怖的事情。函數

邏輯上,一個頁面,須要顯示一個庫的完整內容。也許是前期沒想到有這麼多數據,佈局

在測試庫裏,只有4000多條。但接入正式庫,4萬多,(如今已是6萬,估計還能漲)測試

那個頁面加載顯示出來,整整花了半個小時,gradle

期間OOM, 我給他開了全局硬件加速便沒有OOM掉了。ui

因此,能夠快速加載顯示列表的想法就來了。

因而SuperRecycler 誕生了

目前測試 是 4萬條數據 80-90ms

10萬條數據,,for循環添加數據都炸了

再多的數據 也就沒有測試了 ,4萬多的測試 應該是夠了。

最簡單的使用

列表最簡單的就是item只顯示一行數據,沒有啥內點擊什麼的。

private SuperRecyclerview myRecyclerview;

    public  void recycler(){

        myRecyclerview = new SuperRecyclerview(this); //參數是當前Activity         //設置Recyclerid 和item 佈局
        myRecyclerview.setID_Item(R.id.recycer, R.layout.recycler_item);              myRecyclerview.setItemnumber(20); //item數量
        //item內的數據,
        myRecyclerview.setRecyclerItemData(new SuperRecyclerview.RecyclerItemData() {
            @Override
            public void RecyclerItemData(final SuperRecyclerview.RecyclerAdapter.ViewHolder
holder, final int position) {

                holder.<TextView>getView(R.id.text).setText("數據內容");
            }
        });


        myRecyclerview.StartRecycer(); //啓動器

    }

複製代碼

是的 就只有上面那麼一點點代碼,一個列表就實現了,適配器什麼,特殊需求再寫咯。

holder.<TextView>getView(R.id.text)

<>內表示使用View的類型

()內是使用View的ID

紅色那行代碼 和普通的實例化後的View沒什麼區別

item的點擊事件

啓動器以前寫

//item
的點擊事件

myRecyclerview.setOnItemClickListener(new SuperRecyclerview.OnItemClickListener()
{
    @Override
    public void onClick(int position) { //短按 position 是第幾個item,從0開始。
       
    }

    @Override
    public void onLongClick(int position) { //長按

    }
});複製代碼

item內的點擊事件

也是在啓動器以前,不過是在數據接口的裏面寫,

//item內的數據,

myRecyclerview.setRecyclerItemData(new SuperRecyclerview.RecyclerItemData()
{


    @Override
    public void RecyclerItemData(final SuperRecyclerview.RecyclerAdapter.ViewHolder
holder, final int position) {

       
holder.<TextView>getView(R.id.text).setText("數據內容");
 //item內的點擊事件,和普通寫點擊事件,沒有區別

holder.<TextView>getView(R.id.text).setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        holder.<TextView>getView(R.id.text).setText("00000");       
      }

  });

 }

});複製代碼

重點就是下面這個,

holder.<TextView>getView(R.id.text).setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        holder.<TextView>getView(R.id.text).setText("00000");       
      }

  });
複製代碼

說明

holder.<TextView>getView(R.id.text)//獲取控件實列,而後就和往常點擊事件同樣寫就能夠複製代碼

構造函數

1

SuperRecyclerview(Activity activity)複製代碼

參數是 當前activity; 知足大部分需求了

2

SuperRecyclerview(Context context,RecyclerViewrecyclerView,int recyclerItem_layout)複製代碼

參數是 

類型

說明

Content

上下文 this

RecyclerView

RecyclerView已綁定好控件(findViewByID)

Int

Item佈局文件

說明,

第一個是在activity裏和Fragment內 應該均可以隨便使用的。Fragment內使用getActivity

第二個是,當在小布局的時候,就是不能有效的綁定RecyclerView控件的時候使用

通常狀況下,都是使用第一個。

使用時候必須寫的方法

首先類的實例化,其次就是下面的三個方法

方法(參數類型)

說明

setID_Item(int ,int)

設置view和item佈局(view的ID,item的佈局)

setItemnumber(int)

設置Item數量

StarRecycler()

主要流程,最後寫。

若是隻是寫這些的話,就只是顯示item原來圖示。

一些可用方法

可用方法(參數類型)

說明

setVertical()

設置Recycler 垂直分佈item

setHorizontal()

設置Recycler 水平分佈item

setItemSpacing(int,int,int,int)

設置item上下左右間距,單位

以上,必須在啓動器以前使用

兩個接口

setOnItemClickListener(OnItemClickListener)

Item的點擊事件 ,參數,直接new它就ok

setRecyclerItemData(RecyclerItemData)

數據接口

Item的數據處理,參數,直接new

被使用在適配器的onBindViewHolder中

有關操做,也能夠在這裏寫

能夠獲取的內容

getAdapter()

獲取適配器

getRecyclerView()

獲取RecyclerVIew實列(好像沒啥用)

getLinearLayoutManager()

獲取LinearLayoutManager

有關數據操做(參數類型)

return(返回值)

DataSortLS(List<String>)

List<String>的排序

排序後的數據

DataSortALS(ArrayList<String>)

ArrayList<String>的排序

排序後的數據

DataDelRepeatLS(List<String>)

List<String>的去重複

去重後的數據

DataDelRepeatALS(ArrayList<String>)

ArrayList<String>的去重

去重後的數據

notifyDataSetChanged()

刷新全部數據(想刷新某個數據,請獲取適配器,在使用適配器中的刷新方法)

downItemNotifyChange(int,int,int)

參數:

開始顯示幾個item

剩下幾個item的時候,刷新後面item

刷新幾個item

下拉,分段式刷新僅限在數據接口中使用

(沒啥子用)

原本是想分段加載數據,可是如今數據不須要和原來同樣加載,全部也就沒啥用了

有關item數量的操做(參數類型)

參數說明

itemAddNumber(int)

增長item

增長item的數量

itemDelNumber(int)

刪除item

刪除後剩餘item數量

itemNumberRevise(int)

item數量變動刷新

變動後item數量

setItemNumberNET()

說明:由於數據不會到達adapter,因此一切有關數據的操做,請在源數據中進行。

好比,

增長5個item,,,那麼相對應,,數據中也得要增長5條數據。不然會報數組越界錯誤

增長和刪除 不涉及數據刷新。

增長item

在數據源上操做

//增長item
public void addRecyclerItem(){
    for (int i = 0; i < 10; i++){ //在數據源上增長10條數據
        arrayList.add("喵喵"+i);
    }

    myRecyclerview.itemAddNumber(10); //參數:增長item的數量
    myRecyclerview.notifyDataSetChanged(); //刷新全部
}複製代碼

刪除item

在數據源上操做

//刪除item

public
void delRecyclerItem(){
    for (int i = 0; i<10; i++){ //刪除前10條數據,數組中刪除數據當心,每次刪除數據,剩餘數據下標會-1
        arrayList.remove(0);
    }
    myRecyclerview.itemDelNumber(arrayList.size()); //參數:剩餘item的數量
    myRecyclerview.notifyDataSetChanged(); //刷新
}

複製代碼

setRecyclerItemData()數據接口特殊說明

這裏寫的代碼,是使用在適配器中的:onBindViewHolder() 方法體中

適配器中的onBindViewHolder() 是顯示一個item,刷新一次

全部有要在適配器onBindViewHolder()中寫的需求均可以在數據接口中寫

同時,弊端也別在數據接口中 寫特別耗時的操做。


使用方式

第一個 使用SuperRecycler.jar包,在分享連接內有

缺點,沒有註釋,android studio的ctrl+Q 看不到註釋了。

第二個 複製SuperRecycler.java文件到你的代碼目錄下

由於集成只有一個文件,因此這個操做很方便。並且每一個使用的方法都有註釋

錯誤

若是是,代碼紅字錯誤,在build.gradle中請使用

implementation 'com.android.support:recyclerview-v7:28.0.0'

版本根據你的support版本自定

資源

含有例子和使用文檔

pan.baidu.com/s/1fUJc1DXV…

提取碼 ydnd

歡迎大佬的進羣交流更多的android 開發經驗

羣號 663917708 

資源失效,進羣找羣主

求關注,求贊

相關文章
相關標籤/搜索