Android 整合實現簡單易用、功能強大的 RecyclerView

KTOClark 8年前發布 | 15K 次閱讀 Android開發 移動開發 RecyclerView

RecycleView_PullToRefresh_LoadMore

整合多個開源項目,自認為相當簡便使用的RecyclerView,支持下拉刷新,加載更多,添加Header和Footer。

功能:

  1. 普通列表功能、為列表添加分割線,設置分割線高度(寬度)、顏色等。
  2. 網格列表功能、為網格列表添加分割線,設置分割線高度(寬度)、顏色等。
  3. 普通列表、網格列表均支持滑動加載更多數據功能,并在網絡失敗情況下,添加了提醒重新加載功能(可看下面示意圖)。
  4. 普通列表、網格列表均支持添加Header功能。 再不需要加載更多數據情況下,支持添加Footer。
  5. 未擴展下拉刷新功能,如需要,請使用Android官方提供的SwipeRefreshLayout 。

    在介紹我整合的項目之前,有必要先說明下我整合的兩個最重要的庫,他們才是真的原創,希望大家尊重原創。

Thanks: 該項目主要整合了兩個開源項目,是在它們的基礎上進行的再創造:

  1. RecyclerView分割線: https://github.com/yqritc/RecyclerView-FlexibleDivider
  2. RecyclerView添加HeaderView和FooterView: https://github.com/cundong/HeaderAndFooterRecyclerView

效果圖: · 垂直列表,添加分割線

· 網格列表,添加分割線

· 垂直列表,添加HeaderView

· 網格列表,添加HeaderView

· 加載更多數據網絡錯誤時,提示重新加載。

實現: 關于該庫是如何整合的,此處不多介紹的,有興趣的人可以下載源碼去看看,當然,不足之處,也可以進行再次擴展。 關于該庫的使用,我還是建議大家該library下載下來,導入自己項目,這樣也方便自己隨意修改使用。

  1. 實現垂直列表

    private void initView() {

    listWeChats = (RecyclerView) findViewById(R.id.listWeChats);
    
    mDatas = new ArrayList<>();
    
    WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
    HeaderAndFooterRecyclerViewAdapter  recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
    listWeChats.setAdapter(recyclerViewAdapter);
    
    listWeChats.setLayoutManager(new LinearLayoutManager(this));
    listWeChats.addItemDecoration(
            new HorizontalDividerItemDecoration.Builder(WChatListActivity.this)
                    .color(Color.parseColor("#00c7c0"))
                    .sizeResId(R.dimen.list_divider_height)
                    .showLastDivider()
                    .marginResId(R.dimen.list_divider_left_margin, R.dimen.list_divider_right_margin)
                    .build(false));
    
    listWeChats.addOnScrollListener(mOnScrollListener);
    

    }</code></pre>

    簡析:HeaderAndFooterRecyclerViewAdapter主要是為了是對RecyclerView.Adapter的擴展實現,通過它,可以添加HeaderView和FooterView(具體可看源碼)。HorizontalDividerItemDecoration則是擴展了RecyclerView.ItemDecoration,用于為垂直列表添加分割線,如果你是一個橫向的列表,則可以使用另一個 ItemDecoration的實現:VerticalDividerItemDecoration。具體的使用可參加項目的示例。

    </li>
  2. 實現網格列表

  3. </ol>
    private void initView() {

        listWeChats = (RecyclerView) findViewById(R.id.listWeChats);
    
        mDatas = new ArrayList<>();
    
        WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
    
        HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
        listWeChats.setAdapter(recyclerViewAdapter);
    
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        gridLayoutManager.setSpanSizeLookup(new HeaderSpanSizeLookup((HeaderAndFooterRecyclerViewAdapter) listWeChats.getAdapter(), gridLayoutManager.getSpanCount()));
        listWeChats.setLayoutManager(gridLayoutManager);
    
    
        Drawable mDivider = getResources().getDrawable(R.drawable.list_divider);
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#00c7c0"));
    
        GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration.Builder(this)
                .setSpanCount(2)
                .setH_spacing(50)
                .setV_spacing(50)
                .setmDivider(mDivider)
                .build();
    
        listWeChats.addItemDecoration(itemDecoration);
    
        listWeChats.addOnScrollListener(mOnScrollListener);
    

    }</code></pre>

    簡析:GridSpacingItemDecoration 用于為列表添加分割線。具體的使用可參加項目的示例。

    1. 實現帶有HeaderView的垂直列表
    private void initView() {

        listWeChats = (RecyclerView) findViewById(R.id.listWeChats);
    
        mDatas = new ArrayList<>();
    
    
        WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
        HeaderAndFooterRecyclerViewAdapter  recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
    
        listWeChats.setAdapter(recyclerViewAdapter);
    
        listWeChats.setLayoutManager(new LinearLayoutManager(this));
    
        listWeChats.addItemDecoration(
                new HorizontalDividerItemDecoration.Builder(WChatListHeaderAndFooterActivity.this)
                        .colorResId(R.color.list_divider_color)
    

    // .color(Color.parseColor("#FF0000")) .sizeResId(R.dimen.list_divider_height) .marginResId(R.dimen.list_divider_left_margin, R.dimen.list_divider_right_margin) .build(true));

        listWeChats.addOnScrollListener(mOnScrollListener);
    
        RecyclerViewUtils.setHeaderView(listWeChats, new SampleHeader(this));
    }</code></pre> 
    

    簡析:RecyclerViewUtils,可以很方便的為RecyclerView添加HeaderView。

    1. 實現帶有HeaderView的網格布局
    private void initView() {
    
            listWeChats = (RecyclerView) findViewById(R.id.listWeChats);
    
            mDatas = new ArrayList<>();
    
            WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
    
            HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
            listWeChats.setAdapter(recyclerViewAdapter);
    
            GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
            gridLayoutManager.setSpanSizeLookup(new HeaderSpanSizeLookup((HeaderAndFooterRecyclerViewAdapter) listWeChats.getAdapter(), gridLayoutManager.getSpanCount()));
            listWeChats.setLayoutManager(gridLayoutManager);
    
    
            Drawable mDivider = getResources().getDrawable(R.drawable.list_divider);
            ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#F0C7C0"));
    
            GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration.Builder(this)
                    .hasHeader()
                    .setSpanCount(2)
                    .setH_spacing(50)
                    .setV_spacing(50)
    //                .setDividerColor(Color.parseColor("#008E00"))
                    .setmDivider(colorDrawable)
    //                .setmDivider(mDivider)
                    .build();
    
            listWeChats.addItemDecoration(itemDecoration);
    
            listWeChats.addOnScrollListener(mOnScrollListener);
    
            RecyclerViewUtils.setHeaderView(listWeChats, new SampleHeader(this));
    
        }

     

 本文由用戶 KTOClark 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!