国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

RecyclerView封裝庫(kù)和綜合案例【包含25篇博客】

silenceboy / 3343人閱讀

摘要:支持復(fù)雜頁(yè)面,例如添加自定義頭部和底部布局,支持橫向滑動(dòng),還可以支持粘貼頭部類(lèi)似微信好友分組,支持不規(guī)則瀑布流效果,支持側(cè)滑刪除功能。支持粘貼頭部的需求效果,這種效果類(lèi)似微信好友分組的那種功能界面。

目錄介紹

1.復(fù)雜頁(yè)面庫(kù)介紹

2.本庫(kù)優(yōu)勢(shì)亮點(diǎn)

2.1 支持多種狀態(tài)切換管理

2.2 支持添加多個(gè)header和footer

2.3 支持側(cè)滑功能和拖拽移動(dòng)

2.4 其他亮點(diǎn)介紹

3.如何使用介紹

3.1 最基礎(chǔ)的使用

3.2 添加下拉刷新和加載更多監(jiān)聽(tīng)

3.3 添加header和footer操作

3.4 設(shè)置數(shù)據(jù)和刷新

3.5 設(shè)置adapter

3.6 設(shè)置條目點(diǎn)擊事件

3.7 設(shè)置側(cè)滑刪除功能[QQ側(cè)滑刪除]

3.8 輕量級(jí)拖拽排序與滑動(dòng)刪除

4.關(guān)于狀態(tài)切換

4.1 關(guān)于布局內(nèi)容

4.2 關(guān)于實(shí)現(xiàn)思路

4.3 關(guān)于狀態(tài)切換api調(diào)用

4.4 關(guān)于自定義狀態(tài)布局

4.5 關(guān)于自定義布局交互事件處理

5.常用api介紹

5.1 狀態(tài)切換方法說(shuō)明

5.2 viewHolder方法說(shuō)明

5.3 adapter方法說(shuō)明

5.4 分割線(xiàn)方法說(shuō)明

5.5 swipe側(cè)滑方法說(shuō)明

5.6 其他api說(shuō)明

6.recyclerView的wiki文檔【更新中】

6.1 封裝庫(kù)部分思路介紹

6.2 優(yōu)化處理邏輯介紹

6.3 recyclerView相關(guān)類(lèi)

6.4 recyclerView滑動(dòng)沖突

6.5 recyclerView緩存機(jī)制

6.5 recyclerView相關(guān)博客(25篇)

7.實(shí)現(xiàn)效果展示

7.1 下拉刷新,上拉加載

7.2 添加多個(gè)headerView和FooterView

7.3 橫向滑動(dòng)

7.4 粘貼頭部

7.5 與coordinatorLayout結(jié)合

7.6 瀑布流效果

8.版本更新說(shuō)明

9.參考資料說(shuō)明

10.其他內(nèi)容介紹

0.recyclerView相關(guān)博客 recyclerView可以說(shuō)應(yīng)用十分廣泛,下面是我逐步整理的博客,結(jié)合博客,你也可以一步一步封裝自己的recyclerView庫(kù)。網(wǎng)上雖然介紹recyclerView很多,但是如果要想熟練掌握,一遍應(yīng)用一邊總結(jié)一遍記錄則也是種不錯(cuò)的做法。 開(kāi)源庫(kù)地址[融合大多數(shù)recyclerView使用案例,可以直接下載demo]:https://github.com/yangchong2...

00.RecyclerView復(fù)雜封裝庫(kù)

幾乎融合了該系列博客中絕大部分的知識(shí)點(diǎn),歡迎一遍看博客一遍實(shí)踐,一步步從簡(jiǎn)單實(shí)現(xiàn)功能強(qiáng)大的庫(kù)

01.RecyclerView

RecycleView的結(jié)構(gòu),RecyclerView簡(jiǎn)單用法介紹

02.Adapter

RecyclerView.Adapter扮演的角色,一般常用的重寫(xiě)方法說(shuō)明,數(shù)據(jù)變更通知之觀察者模式,查看.notifyChanged();源碼

03.ViewHolder

ViewHolder的作用,如何理解對(duì)于ViewHolder對(duì)象的數(shù)量“夠用”之后就停止調(diào)用onCreateViewHolder方法,ViewHolder簡(jiǎn)單封裝

04.LayoutManager

LayoutManager作用是什么?setLayoutManager源碼分析

05.SnapHelper

SnapHelper作用,什么是Fling操作 ,SnapHelper類(lèi)重要的方法,

06.ItemTouchHelper

07.SpanSizeLookup

SpanSizeLookup如何使用,同時(shí)包含列表,2列的網(wǎng)格,3列的網(wǎng)格如何優(yōu)雅實(shí)現(xiàn)?

08.ItemDecoration

ItemDecoration的用途,addItemDecoration()源碼分析

09.RecycledViewPool

RecyclerViewPool用于多個(gè)RecyclerView之間共享View。

11.RecyclerView上拉加載

添加recyclerView的滑動(dòng)事件,上拉加載分頁(yè)數(shù)據(jù),設(shè)置上拉加載的底部footer布局,顯示和隱藏footer布局

12.RecyclerView緩存原理

RecyclerView做性能優(yōu)化要說(shuō)復(fù)雜也復(fù)雜,比如說(shuō)布局優(yōu)化,緩存,預(yù)加載,復(fù)用池,刷新數(shù)據(jù)等等

13.SnapHelper源碼分析

SnapHelper旨在支持RecyclerView的對(duì)齊方式,也就是通過(guò)計(jì)算對(duì)齊RecyclerView中TargetView 的指定點(diǎn)或者容器中的任何像素點(diǎn)。

16.自定義SnapHelper

自定義SnapHelper

19.自定義ItemDecoration分割線(xiàn)

需要自定義類(lèi)實(shí)現(xiàn)RecyclerView.ItemDecoration類(lèi),并選擇重寫(xiě)合適方法

22.RecyclerView問(wèn)題匯總

getLayoutPosition()和getAdapterPosition()的區(qū)別

23.RecyclerView滑動(dòng)沖突

01.如何判斷RecyclerView控件滑動(dòng)到頂部和底部

02.RecyclerView嵌套R(shí)ecyclerView 條目自動(dòng)上滾的Bug

03.ScrollView嵌套R(shí)ecyclerView滑動(dòng)沖突

04.ViewPager嵌套水平RecyclerView橫向滑動(dòng)到底后不滑動(dòng)ViewPager

05.RecyclerView嵌套R(shí)ecyclerView的滑動(dòng)沖突問(wèn)題

06.RecyclerView使用Glide加載圖片導(dǎo)致圖片錯(cuò)亂問(wèn)題解決

24.ScrollView嵌套R(shí)ecyclerView問(wèn)題

要實(shí)現(xiàn)在NestedScrollView中嵌入一個(gè)或多個(gè)RecyclerView,會(huì)出現(xiàn)滑動(dòng)沖突,焦點(diǎn)搶占,顯示不全等。如何處理?

1.復(fù)雜頁(yè)面庫(kù)介紹

自定義支持上拉加載更多【加載中,加載失敗[比如沒(méi)有更多數(shù)據(jù)],加載異常[無(wú)網(wǎng)絡(luò)],加載成功等多種狀態(tài)】,下拉刷新,可以實(shí)現(xiàn)復(fù)雜的狀態(tài)頁(yè)面,支持自由切換狀態(tài)【加載中,加載成功,加載失敗,沒(méi)網(wǎng)絡(luò)等狀態(tài)】的控件,拓展功能[支持長(zhǎng)按拖拽,側(cè)滑刪除]可以選擇性添加。具體使用方法,可以直接參考demo案例。

支持復(fù)雜type頁(yè)面,例如添加自定義頭部HeaderView和底部布局FooterView,支持橫向滑動(dòng)list,還可以支持粘貼頭部list[類(lèi)似微信好友分組],支持不規(guī)則瀑布流效果,支持側(cè)滑刪除功能。

2.本庫(kù)優(yōu)勢(shì)亮點(diǎn) 2.1 支持多種狀態(tài)切換管理

支持在布局中或者代碼設(shè)置自定義不同狀態(tài)的view,一行代碼既可以切換不同的狀態(tài),十分方便。

針對(duì)自定義狀態(tài)view或者layout,可以實(shí)現(xiàn)交互功能,比如當(dāng)切換到網(wǎng)絡(luò)異常的頁(yè)面,可以點(diǎn)擊頁(yè)面控件取刷新數(shù)據(jù)或者跳轉(zhuǎn)設(shè)置網(wǎng)絡(luò)頁(yè)面

2.2 支持添加多個(gè)header和footer

支持添加多個(gè)自定義header頭部布局,可以自定義footer底部布局。十分方便實(shí)現(xiàn)復(fù)雜type的布局頁(yè)面,結(jié)構(gòu)上層次分明,便于維護(hù)。

支持復(fù)雜界面使用,比如有的頁(yè)面包含有輪播圖,按鈕組合,橫向滑動(dòng)list,還有復(fù)雜list,那么用這個(gè)控件就可以搞定。

2.3 支持側(cè)滑功能和拖拽移動(dòng)

輕量級(jí)側(cè)滑刪除菜單,直接嵌套item布局即可使用,使用十分簡(jiǎn)單

通過(guò)自定義ItemTouchHelper實(shí)現(xiàn)RecyclerView條目Item拖拽排序,只是設(shè)置是否拖拽,設(shè)置拖拽item的背景顏色,優(yōu)化了拖拽效果,比如在拖拽過(guò)程中設(shè)置item的縮放和漸變效果

2.4 其他亮點(diǎn)介紹

支持上拉加載,下拉刷新。當(dāng)上拉加載更多失敗或者異常時(shí),可以設(shè)置自定義加載更多失敗或者異常布局(比如沒(méi)有網(wǎng)絡(luò)時(shí)的場(chǎng)景),同時(shí)點(diǎn)擊該異常或者失敗布局可以恢復(fù)加載更多數(shù)據(jù);當(dāng)上拉加載更多沒(méi)有更多數(shù)據(jù)時(shí),可以設(shè)置自定義加載更多無(wú)數(shù)據(jù)布局。

可以設(shè)置上拉加載更多后自動(dòng)加載下一頁(yè)數(shù)據(jù),也可以上拉加載更多后手動(dòng)觸發(fā)加載下一頁(yè)數(shù)據(jù)。在上拉加載更多時(shí),可以設(shè)置加載更多的布局,支持加載監(jiān)聽(tīng)。

支持粘貼頭部的需求效果,這種效果類(lèi)似微信好友分組的那種功能界面。

支持插入【插入指定索引】,更新【更新指定索引或者data數(shù)據(jù)】或者刪除某條數(shù)據(jù),支持刪除所有數(shù)據(jù)。同時(shí)在多線(xiàn)程條件下,添加了鎖機(jī)制避免數(shù)據(jù)錯(cuò)亂!

支持橫向滑動(dòng)list效果,支持瀑布流的效果,還支持與CoordinatorLayout結(jié)合實(shí)現(xiàn)炫酷的效果。這種效果特別不錯(cuò)……

已經(jīng)用于實(shí)際開(kāi)發(fā)項(xiàng)目投資界,新芽,沙丘大學(xué)中……且經(jīng)過(guò)近三年時(shí)間的迭代與維護(hù),持續(xù)更新維護(hù)中!

3.如何使用介紹 3.1 最基礎(chǔ)的使用

首先在集成:

implementation "org.yczbj:YCRefreshViewLib:2.5.8"

在布局中

在代碼中,初始化recyclerView

adapter = new PersonAdapter(this);
recyclerView.setAdapter(adapter);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
adapter.addAll(data);

在代碼中,創(chuàng)建adapter實(shí)現(xiàn)RecyclerArrayAdapter

public class PersonAdapter extends RecyclerArrayAdapter {

    public PersonAdapter(Context context) {
        super(context);
    }

    @Override
    public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
        return new PersonViewHolder(parent);
    }

    public class PersonViewHolder extends BaseViewHolder {

        private ImageView iv_news_image;

        PersonViewHolder(ViewGroup parent) {
            super(parent, R.layout.item_news);
            iv_news_image = getView(R.id.iv_news_image);
        }

        @Override
        public void setData(final PersonData person){

        }
    }
}

3.2 添加下拉刷新和加載更多監(jiān)聽(tīng)

下拉刷新監(jiān)聽(tīng)操作

//設(shè)置刷新listener
recyclerView.setRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        //刷新操作
    }
});
//設(shè)置是否刷新
recyclerView.setRefreshing(false);
//設(shè)置刷新顏色
recyclerView.setRefreshingColorResources(R.color.colorAccent);

上拉加載更多監(jiān)聽(tīng)操作

第一種情況,上拉加載更多后自動(dòng)加載下一頁(yè)數(shù)據(jù)

//設(shè)置上拉加載更多時(shí)布局,以及監(jiān)聽(tīng)事件
adapter.setMore(R.layout.view_more, new OnLoadMoreListener() {
    @Override
    public void onLoadMore() {
        //可以做請(qǐng)求下一頁(yè)操作
    }
});

第二種情況,上拉加載更多后手動(dòng)觸發(fā)加載下一頁(yè)數(shù)據(jù)

adapter.setMore(R.layout.view_more2, new OnMoreListener() {
    @Override
    public void onMoreShow() {
        //不做處理
    }

    @Override
    public void onMoreClick() {
        //點(diǎn)擊觸發(fā)加載下一頁(yè)數(shù)據(jù)
    }
});

在上拉加載更多時(shí),可能出現(xiàn)沒(méi)有更多數(shù)據(jù),或者上拉加載失敗,該如何處理呢?

//設(shè)置上拉加載沒(méi)有更多數(shù)據(jù)監(jiān)聽(tīng)
adapter.setNoMore(R.layout.view_no_more, new OnNoMoreListener() {
    @Override
    public void onNoMoreShow() {
        //上拉加載,沒(méi)有更多數(shù)據(jù)展示,這個(gè)方法可以暫停或者停止加載數(shù)據(jù)
        adapter.pauseMore();
    }

    @Override
    public void onNoMoreClick() {
        //這個(gè)方法是點(diǎn)擊沒(méi)有更多數(shù)據(jù)展示布局的操作,比如可以做吐司等等
        Log.e("逗比","沒(méi)有更多數(shù)據(jù)了");
    }
});
//設(shè)置上拉加載更多異常監(jiān)聽(tīng)數(shù)據(jù)監(jiān)聽(tīng)
adapter.setError(R.layout.view_error, new OnErrorListener() {
    @Override
    public void onErrorShow() {
        //上拉加載,加載更多數(shù)據(jù)異常展示,這個(gè)方法可以暫停或者停止加載數(shù)據(jù)
        adapter.pauseMore();
    }

    @Override
    public void onErrorClick() {
        //這個(gè)方法是點(diǎn)擊加載更多數(shù)據(jù)異常展示布局的操作,比如恢復(fù)加載更多等等
        adapter.resumeMore();
    }
});

3.3 添加header和footer操作

添加headerView操作。至于添加footerView的操作,幾乎和添加header步驟是一樣的。

添加普通的布局【非listView或者RecyclerView布局】

adapter.addHeader(new InterItemView() {
    @Override
    public View onCreateView(ViewGroup parent) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.header_view, null);
        return inflate;
    }

    @Override
    public void onBindView(View headerView) {
        TextView tvTitle = headerView.findViewById(R.id.tvTitle);
    }
});

添加list布局【以橫向recyclerView為例子】

adapter.addHeader(new InterItemView() {
    @Override
    public View onCreateView(ViewGroup parent) {
        RecyclerView recyclerView = new RecyclerView(parent.getContext()){
            //為了不打擾橫向RecyclerView的滑動(dòng)操作,可以這樣處理
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouchEvent(MotionEvent event) {
                super.onTouchEvent(event);
                return true;
            }
        };
        return recyclerView;
    }

    @Override
    public void onBindView(View headerView) {
        //這里的處理別忘了
        ((ViewGroup)headerView).requestDisallowInterceptTouchEvent(true);
    }
});

注意要點(diǎn)

如果添加了HeaderView,凡是通過(guò)ViewHolder拿到的position都要減掉HeaderView的數(shù)量才能得到正確的position。

3.4 設(shè)置數(shù)據(jù)和刷新

添加所有數(shù)據(jù),可以是集合,也可以是數(shù)組

//添加所有數(shù)據(jù)
adapter.addAll(data);
//添加單挑數(shù)據(jù)
adapter.add(data);

插入,刷新和刪除數(shù)據(jù)

//插入指定索引數(shù)據(jù),單個(gè)數(shù)據(jù)
adapter.insert(data, pos);
//插入指定索引數(shù)據(jù),多個(gè)數(shù)據(jù)
adapter.insertAll(data, pos);
//刷新指定索引數(shù)據(jù)
adapter.update(data, pos);
//刪除數(shù)據(jù),指定數(shù)據(jù)
adapter.remove(data);
//刪除數(shù)據(jù),指定索引
adapter.remove(pos);
//清空所有數(shù)據(jù)

3.5 設(shè)置adapter

注意自定義adapter需要實(shí)現(xiàn)RecyclerArrayAdapter,其中T是泛型,就是你要使用的bean數(shù)據(jù)類(lèi)型

public class PersonAdapter extends RecyclerArrayAdapter {

    public PersonAdapter(Context context) {
        super(context);
    }

    @Override
    public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
        return new PersonViewHolder(parent);
    }

    public class PersonViewHolder extends BaseViewHolder {

        private TextView tv_title;
        private ImageView iv_news_image;

        PersonViewHolder(ViewGroup parent) {
            super(parent, R.layout.item_news);
            iv_news_image = getView(R.id.iv_news_image);
            tv_title = getView(R.id.tv_title);

            //添加孩子的點(diǎn)擊事件
            addOnClickListener(R.id.iv_news_image);
            addOnClickListener(R.id.tv_title);
        }

        @Override
        public void setData(final PersonData person){
            Log.i("ViewHolder","position"+getDataPosition());
            tv_title.setText(person.getName());
        }
    }
}

3.6 設(shè)置條目點(diǎn)擊事件[item條目點(diǎn)擊事件,item條目孩子view點(diǎn)擊事件]

條目單擊點(diǎn)擊事件,長(zhǎng)按事件[省略,可以自己看代碼]

adapter.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(int position) {
        if (adapter.getAllData().size()>position && position>=0){
            //處理點(diǎn)擊事件邏輯
        }
    }
});

條目中孩子的點(diǎn)擊事件

//添加孩子的點(diǎn)擊事件,可以看3.5設(shè)置adapter
addOnClickListener(R.id.iv_news_image);
addOnClickListener(R.id.tv_title);

//設(shè)置孩子的點(diǎn)擊事件
adapter.setOnItemChildClickListener(new OnItemChildClickListener() {
    @Override
    public void onItemChildClick(View view, int position) {
        switch (view.getId()){
            case R.id.iv_news_image:
                Toast.makeText(HeaderFooterActivity.this,
                        "點(diǎn)擊圖片了",Toast.LENGTH_SHORT).show();
                break;
            case R.id.tv_title:
                Toast.makeText(HeaderFooterActivity.this,
                        "點(diǎn)擊標(biāo)題",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
});

3.7 設(shè)置側(cè)滑刪除功能[QQ側(cè)滑刪除]

在布局文件中,這里省略部分代碼


    
    

    
    

在代碼中設(shè)置

在adapter中定義接口

private OnSwipeMenuListener listener;
public void setOnSwipeMenuListener(OnSwipeMenuListener listener) {
    this.listener = listener;
}

在adapter設(shè)置點(diǎn)擊事件

View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_del:
                if (null != listener) {
                    listener.toDelete(getAdapterPosition());
                }
                break;
            case R.id.btn_top:
                if (null != listener) {
                    listener.toTop(getAdapterPosition());
                }
                break;
        }
    }
};
btn_del.setOnClickListener(clickListener);
btn_top.setOnClickListener(clickListener);

處理置頂或者刪除的功能

adapter.setOnSwipeMenuListener(new OnSwipeMenuListener() {
    //刪除功能
    @Override
    public void toDelete(int position) {

    }

    //置頂功能
    @Override
    public void toTop(int position) {

    }
});

3.8 輕量級(jí)拖拽排序與滑動(dòng)刪除

處理長(zhǎng)按拖拽,滑動(dòng)刪除的功能。輕量級(jí),自由選擇是否實(shí)現(xiàn)。

mCallback = new DefaultItemTouchHelpCallback(new DefaultItemTouchHelpCallback
                        .OnItemTouchCallbackListener() {
    @Override
    public void onSwiped(int adapterPosition) {
        // 滑動(dòng)刪除的時(shí)候,從數(shù)據(jù)庫(kù)、數(shù)據(jù)源移除,并刷新UI
    }

    @Override
    public boolean onMove(int srcPosition, int targetPosition) {
        return false;
    }
});
mCallback.setDragEnable(true);
mCallback.setSwipeEnable(true);
mCallback.setColor(this.getResources().getColor(R.color.colorAccent));
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);

4.關(guān)于狀態(tài)切換 4.1 關(guān)于布局內(nèi)容

YCRecyclerView是一個(gè)組合自定義控件,其布局如下所示

 

    
        
        
        
        
        
        
        
        
    

4.2 關(guān)于實(shí)現(xiàn)思路

關(guān)于頁(yè)面狀態(tài)切換的思路

第一種方式:直接把這些界面include到main界面中,然后動(dòng)態(tài)去切換界面,后來(lái)發(fā)現(xiàn)這樣處理不容易復(fù)用到其他項(xiàng)目中,而且在activity中處理這些狀態(tài)的顯示和隱藏比較亂

第二種方式:利用子類(lèi)繼承父類(lèi)特性,在父類(lèi)中寫(xiě)切換狀態(tài),但有些界面如果沒(méi)有繼承父類(lèi),又該如何處理

而本庫(kù)采用的做法思路

一個(gè)幀布局FrameLayout里寫(xiě)上4種不同類(lèi)型布局,正常布局,空布局,加載loading布局,錯(cuò)誤布局[網(wǎng)絡(luò)異常,加載數(shù)據(jù)異常]

當(dāng)然也可以自定義這些狀態(tài)的布局,通過(guò)addView的形式,將不同狀態(tài)布局添加到對(duì)應(yīng)的FrameLayout中。而切換狀態(tài),只需要設(shè)置布局展示或者隱藏即可。

4.3 關(guān)于狀態(tài)切換api調(diào)用

如下所示

//設(shè)置加載數(shù)據(jù)完畢狀態(tài)
recyclerView.showRecycler();
//設(shè)置加載數(shù)據(jù)為空狀態(tài)
recyclerView.showEmpty();
//設(shè)置加載錯(cuò)誤狀態(tài)
recyclerView.showError();
//設(shè)置加載數(shù)據(jù)中狀態(tài)
recyclerView.showProgress();

4.4 關(guān)于自定義狀態(tài)布局

如下所示

//設(shè)置空狀態(tài)頁(yè)面自定義布局
recyclerView.setEmptyView(R.layout.view_custom_empty_data);
recyclerView.setEmptyView(view);
//獲取空頁(yè)面自定義布局
View emptyView = recyclerView.getEmptyView();

//設(shè)置異常狀態(tài)頁(yè)面自定義布局
recyclerView.setErrorView(R.layout.view_custom_data_error);
recyclerView.setErrorView(view);

//設(shè)置加載loading狀態(tài)頁(yè)面自定義布局
recyclerView.setProgressView(R.layout.view_progress_loading);
recyclerView.setProgressView(view);

4.5 關(guān)于自定義布局交互事件處理

有時(shí)候,加載頁(yè)面出現(xiàn)異常情況,比如沒(méi)有網(wǎng)絡(luò)會(huì)顯示自定義的網(wǎng)絡(luò)異常頁(yè)面。現(xiàn)在需要點(diǎn)擊異常頁(yè)面按鈕等等操作,那么該如何做呢?

//注意需要
LinearLayout ll_error_view = (LinearLayout) recyclerView.findViewById(R.id.ll_error_view);
ll_error_view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //比如,跳轉(zhuǎn)到網(wǎng)絡(luò)設(shè)置頁(yè)面,或者再次刷新數(shù)據(jù),或者其他操作等等
    }
});

5.常用api介紹

狀態(tài)切換方法說(shuō)明

//設(shè)置加載數(shù)據(jù)完畢狀態(tài)
recyclerView.showRecycler();
//設(shè)置加載數(shù)據(jù)為空狀態(tài)
recyclerView.showEmpty();
//設(shè)置加載錯(cuò)誤狀態(tài)
recyclerView.showError();
//設(shè)置加載數(shù)據(jù)中狀態(tài)
recyclerView.showProgress();
//設(shè)置自定義布局,其他幾個(gè)方法同理
recyclerView.setEmptyView(R.layout.view_custom_empty_data);

viewHolder方法說(shuō)明

//子類(lèi)設(shè)置數(shù)據(jù)方法
setData方法
//findViewById方式
iv_news_image = getView(R.id.iv_news_image);
//獲取上下文
Context context = getContext();
//獲取數(shù)據(jù)索引的位置
int dataPosition = getDataPosition();
//添加item中子控件的點(diǎn)擊事件
addOnClickListener(R.id.tv_title);

adapter方法說(shuō)明

//刪除索引處的數(shù)據(jù)
adapter.remove(0);
//觸發(fā)清空所有數(shù)據(jù)
adapter.removeAll();
//添加數(shù)據(jù),注意這個(gè)是在最后索引處添加
adapter.add(new PersonData());
//添加所有數(shù)據(jù)
adapter.addAll(DataProvider.getPersonList(0));
//插入數(shù)據(jù)
adapter.insert(data,3);
//在某個(gè)索引處插入集合數(shù)據(jù)
adapter.insertAll(data,3);
//獲取item索引位置
adapter.getPosition(data);
//觸發(fā)清空所有的數(shù)據(jù)
adapter.clear();
//獲取所有的數(shù)據(jù)
adapter.getAllData();

//清除所有footer
adapter.removeAllFooter();
//清除所有header
adapter.removeAllHeader();
//添加footerView
adapter.addFooter(view);
//添加headerView
adapter.addHeader(view);
//移除某個(gè)headerView
adapter.removeHeader(view);
//移除某個(gè)footerView
adapter.removeFooter(view);
//獲取某個(gè)索引處的headerView
adapter.getHeader(0);
//獲取某個(gè)索引處的footerView
adapter.getFooter(0);
//獲取footer的數(shù)量
adapter.getFooterCount();
//獲取header的數(shù)量
adapter.getHeaderCount();

//設(shè)置上拉加載更多的自定義布局和監(jiān)聽(tīng)
adapter.setMore(R.layout.view_more,listener);
//設(shè)置上拉加載更多的自定義布局和監(jiān)聽(tīng)
adapter.setMore(view,listener);
//設(shè)置上拉加載沒(méi)有更多數(shù)據(jù)布局
adapter.setNoMore(R.layout.view_nomore);
//設(shè)置上拉加載沒(méi)有更多數(shù)據(jù)布局
adapter.setNoMore(view);
//設(shè)置上拉加載沒(méi)有更多數(shù)據(jù)監(jiān)聽(tīng)
adapter.setNoMore(R.layout.view_nomore,listener);
//設(shè)置上拉加載異常的布局
adapter.setError(R.layout.view_error);
//設(shè)置上拉加載異常的布局
adapter.setError(view);
//設(shè)置上拉加載異常的布局和異常監(jiān)聽(tīng)
adapter.setError(R.layout.view_error,listener);
//暫停上拉加載更多
adapter.pauseMore();
//停止上拉加載更多
adapter.stopMore();
//恢復(fù)上拉加載更多
adapter.resumeMore();

//獲取上下文
adapter.getContext();
//應(yīng)該使用這個(gè)獲取item個(gè)數(shù)
adapter.getCount();
//設(shè)置操作數(shù)據(jù)[增刪改查]后,是否刷新adapter
adapter.setNotifyOnChange(true);

//設(shè)置孩子點(diǎn)擊事件
adapter.setOnItemChildClickListener(listener);
//設(shè)置條目點(diǎn)擊事件
adapter.setOnItemClickListener(listener);
//設(shè)置條目長(zhǎng)按事件
adapter.setOnItemLongClickListener(listener);

分割線(xiàn)方法說(shuō)明

//可以設(shè)置線(xiàn)條顏色和寬度的分割線(xiàn)
//四個(gè)參數(shù),上下文,方向,線(xiàn)寬,顏色
final RecycleViewItemLine line = new RecycleViewItemLine(this, LinearLayout.HORIZONTAL,
        (int)AppUtils.convertDpToPixel(1,this),
        this.getResources().getColor(R.color.color_f9f9f9));
recyclerView.addItemDecoration(line);

//適用于瀑布流中的間距設(shè)置
SpaceViewItemLine itemDecoration = new SpaceViewItemLine(
        (int) AppUtils.convertDpToPixel(8,this));
itemDecoration.setPaddingEdgeSide(true);
itemDecoration.setPaddingStart(true);
itemDecoration.setPaddingHeaderFooter(true);
recyclerView.addItemDecoration(itemDecoration);

//可以設(shè)置線(xiàn)條顏色和寬度,并且可以設(shè)置距離左右的間距
DividerViewItemLine itemDecoration = new
        DividerViewItemLine( this.getResources().getColor(R.color.color_f9f9f9)
        , LibUtils.dip2px(this, 1f),
        LibUtils.dip2px(this, 72), 0);
itemDecoration.setDrawLastItem(false);
recyclerView.addItemDecoration(itemDecoration);

其他api說(shuō)明

6.recyclerView的wiki文檔【更新中】 6.1 封裝庫(kù)部分思路介紹

01.整體封裝思路

02.添加下拉刷新

03.添加header和footer

04.添加上拉加載

05.接口分離法則

06.泛型在框架中應(yīng)用

07.封裝adapter

08.封裝ViewHolder

09.狀態(tài)管理切換

10.View事件分發(fā)運(yùn)用

11.側(cè)滑刪除功能

12.Item拖拽排序與滑動(dòng)刪除

13.自定義ItemDecoration

6.2 優(yōu)化處理邏輯介紹

01.接口分離優(yōu)化

02.去除淡黃色警告

03.SparseArray替代HashMap

04.瀑布流圖片錯(cuò)亂問(wèn)題解決

05.關(guān)于點(diǎn)擊事件放在哪里優(yōu)化

06.ViewHolder優(yōu)化

07.連續(xù)上拉加載更多優(yōu)化

08.拖拽排序與滑動(dòng)刪除優(yōu)化

09.暫停或停止加載數(shù)據(jù)優(yōu)化

10.狀態(tài)切換交互優(yōu)化

11.異常情況下保存狀態(tài)

12.多線(xiàn)程下插入數(shù)據(jù)優(yōu)化

13.recyclerView滑動(dòng)卡頓優(yōu)化

6.3 recyclerView相關(guān)類(lèi)

01.recyclerView

02.layoutManager

03.adapter

04.viewHolder

05.SnapHelper

06.ItemTouchHelper

07.SpanSizeLookup

08.ItemDecoration

6.4 recyclerView滑動(dòng)沖突

01.如何判斷RecyclerView控件滑動(dòng)到頂部和底部

02.RecyclerView嵌套R(shí)ecyclerView 條目自動(dòng)上滾的Bug

03.ScrollView嵌套R(shí)ecyclerView滑動(dòng)沖突

04.ViewPager嵌套水平RecyclerView橫向滑動(dòng)到底后不滑動(dòng)ViewPager

05.RecyclerView嵌套R(shí)ecyclerView的滑動(dòng)沖突問(wèn)題

06.RecyclerView使用Glide加載圖片導(dǎo)致圖片錯(cuò)亂問(wèn)題解決

6.5 recyclerView緩存機(jī)制

01.性能如何優(yōu)化

02.RecyclerView繪制原理圖

03.繪制原理分析過(guò)程

04.緩存機(jī)制

05.屏幕滑動(dòng)時(shí)分析

7.實(shí)現(xiàn)效果展示 7.1 使用過(guò)YCRefreshView庫(kù)的案例代碼

可以直接參考demo,或者直接參考的我其他案例,其中這幾個(gè)案例中使用到了該庫(kù)

https://github.com/yangchong2...

https://github.com/yangchong2...

7.2 圖片展示效果












7.3 部分案例圖展示[部分案例圖可以參考7.1]


8.版本更新說(shuō)明

v1.0 更新于2016年11月2日

v1.1 更新于2017年3月13日

v1.3 更新于2017年8月9日

v1.…… 更新于2018年1月5日

v2.2 更新于2018年1月17日

v2.3 更新于2018年2月9日

v2.4 更新于2018年3月19日

v2.5.6 更新于2018年8月6日

v2.5.7 更新于2019年3月3日

v2.5.8 更新于2019年3月4日

9.參考資料說(shuō)明

非常感謝前輩大神的封裝思路和代碼案例,感謝!!!

https://github.com/XRecyclerV...

BGARefreshLayout-Android:https://github.com/bingoogola...

Android-PullToRefresh:https://github.com/chrisbanes...

adapter:https://github.com/CymChad/Ba...

fastAdapter:https://github.com/mikepenz/F...

Jude95/EasyRecyclerView:https://github.com/Jude95/Eas...

UltimateRecyclerView:https://github.com/cymcsg/Ult...

MultiType:https://github.com/drakeet/Mu...

關(guān)于viewHolder的封裝,參考是鴻洋大神的baseAdapter

關(guān)于RecyclerView實(shí)現(xiàn)條目Item拖拽排序與滑動(dòng)刪除,參看是嚴(yán)正杰大神的博客,拖拽排序

關(guān)于仿照QQ側(cè)滑刪除,參考是SwipeMenu的案例,具體可以看:SwipeMenu

10.其他內(nèi)容介紹 01.關(guān)于博客匯總鏈接

1.技術(shù)博客匯總

2.開(kāi)源項(xiàng)目匯總

3.生活博客匯總

4.喜馬拉雅音頻匯總

5.其他匯總

02.關(guān)于我的博客

我的個(gè)人站點(diǎn):www.yczbj.org,www.ycbjie.cn

github:https://github.com/yangchong211

知乎:https://www.zhihu.com/people/...

簡(jiǎn)書(shū):http://www.jianshu.com/u/b7b2...

csdn:http://my.csdn.net/m0_37700275

喜馬拉雅聽(tīng)書(shū):http://www.ximalaya.com/zhubo...

開(kāi)源中國(guó):https://my.oschina.net/zbj161...

泡在網(wǎng)上的日子:http://www.jcodecraeer.com/me...

郵箱:yangchong211@163.com

阿里云博客:https://yq.aliyun.com/users/a... 239.headeruserinfo.3.dT4bcV

segmentfault頭條:https://segmentfault.com/u/xi...

掘金:https://juejin.im/user/593943...

開(kāi)源庫(kù)地址[融合大多數(shù)recyclerView使用案例,可以直接下載demo]:https://github.com/yangchong2...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74341.html

相關(guān)文章

  • RecyclerView問(wèn)題匯總

    摘要:缺點(diǎn)自動(dòng)裝箱的存在意味著每一次插入都會(huì)有額外的對(duì)象創(chuàng)建。對(duì)象本身是一層額外需要被創(chuàng)建以及被垃圾回收的對(duì)象。相較于我們舍棄了和類(lèi)型的放棄了并依賴(lài)于二分法查找。 目錄介紹 25.0.0.0 請(qǐng)說(shuō)一下RecyclerView?adapter的作用是什么,幾個(gè)方法是做什么用的?如何理解adapter訂閱者模式? 25.0.0.1 ViewHolder的作用是什么?如何理解ViewHolder...

    boredream 評(píng)論0 收藏0
  • RecyclerView用法和源碼深度解析

    摘要:此方法應(yīng)由實(shí)現(xiàn)使用,以獲取視圖來(lái)表示來(lái)自的數(shù)據(jù)。如果適配器沒(méi)有指示給定位置上的數(shù)據(jù)已更改,則回收程序?qū)L試發(fā)回一個(gè)以前為該數(shù)據(jù)初始化的報(bào)廢視圖,而不進(jìn)行重新綁定。如果它只附加了一個(gè)適配器,并且新適配器使用與不同的,則將清除其緩存。 目錄介紹 1.RecycleView的結(jié)構(gòu) 2.Adapter 2.1 RecyclerView.Adapter扮演的角色 2.2 重寫(xiě)的方法 2.3...

    ShowerSun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<