Android 整合實現簡單易用、功能強大的 RecyclerView
RecycleView_PullToRefresh_LoadMore
整合多個開源項目,自認為相當簡便使用的RecyclerView,支持下拉刷新,加載更多,添加Header和Footer。
功能:
- 普通列表功能、為列表添加分割線,設置分割線高度(寬度)、顏色等。
- 網格列表功能、為網格列表添加分割線,設置分割線高度(寬度)、顏色等。
- 普通列表、網格列表均支持滑動加載更多數據功能,并在網絡失敗情況下,添加了提醒重新加載功能(可看下面示意圖)。
- 普通列表、網格列表均支持添加Header功能。 再不需要加載更多數據情況下,支持添加Footer。
-
未擴展下拉刷新功能,如需要,請使用Android官方提供的SwipeRefreshLayout 。
在介紹我整合的項目之前,有必要先說明下我整合的兩個最重要的庫,他們才是真的原創,希望大家尊重原創。
Thanks: 該項目主要整合了兩個開源項目,是在它們的基礎上進行的再創造:
- RecyclerView分割線: https://github.com/yqritc/RecyclerView-FlexibleDivider
- RecyclerView添加HeaderView和FooterView: https://github.com/cundong/HeaderAndFooterRecyclerView
效果圖: · 垂直列表,添加分割線
· 網格列表,添加分割線
· 垂直列表,添加HeaderView
· 網格列表,添加HeaderView
· 加載更多數據網絡錯誤時,提示重新加載。
實現: 關于該庫是如何整合的,此處不多介紹的,有興趣的人可以下載源碼去看看,當然,不足之處,也可以進行再次擴展。 關于該庫的使用,我還是建議大家該library下載下來,導入自己項目,這樣也方便自己隨意修改使用。
-
實現垂直列表
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>實現網格列表
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 用于為列表添加分割線。具體的使用可參加項目的示例。
- 實現帶有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。
- 實現帶有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)); }