Android 中的 XRecyclerview的使用案例
前言:
我們?cè)谏弦黄恼轮袑W(xué)到了Recyclerview但是在現(xiàn)實(shí)中往往需求不是那么的簡(jiǎn)單,可能需要多種需求合并起來(lái),例如常見(jiàn)的上下拉刷新,刪除 item 還有多種item,有著頭部和尾部等等之類的。這次我們久來(lái)學(xué)習(xí)一個(gè)RecyclerView的庫(kù),XRecyclerView的他集合了眾多的功能,下面就讓我來(lái)講解一下如何使用。
步驟:
- 引用 庫(kù)
- 創(chuàng)建 控件
- 下拉刷新
- 設(shè)置上拉下拉刷新的樣式
- 創(chuàng)建頭部
- 設(shè)置上下拉的文字提示語(yǔ)
- 設(shè)置刷新的回調(diào)
- 更新完畢
- 實(shí)戰(zhàn)過(guò)程
- 彩蛋
- 我的案例
引用庫(kù)
compile 'com.jcodecraeer:xrecyclerview:1.5.8'
創(chuàng)建控件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.XRecyclerView> </LinearLayout>
設(shè)置是否可以上下拉刷新(默認(rèn)是可以的)
recyclerView.setPullRefreshEnabled(true); recyclerView.setLoadingMoreEnabled(false);
設(shè)置上拉下拉刷新的樣式
recyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader); recyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallRotate); recyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
設(shè)置頭部
recyclerView .getDefaultRefreshHeaderView() .setRefreshTimeVisible(true); View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header,(ViewGroup)findViewById(android.R.id.content),false); recyclerView.addHeaderView(header);
設(shè)置上下拉的文字提示語(yǔ)
// recyclerView.getDefaultFootView().setLoadingHint("自定義加載中提示"); recyclerView.getDefaultFootView().setNoMoreHint("自定義加載完畢提示");
設(shè)置刷新的回調(diào)(onRefrsh為刷新回調(diào),onLoadMore為下拉更新)
recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable(){ public void run() { InternextData(2); } }, 2000); } @Override public void onLoadMore() { } });
更新完畢
lists.clear(); lists.addAll( ReadAllLock.arrayDemoFromData(body)); adapter.notifyDataSetChanged(); recyclerView.refreshComplete();
實(shí)戰(zhàn)過(guò)程
默認(rèn)初級(jí)進(jìn)入頁(yè)面的時(shí)候先加載好數(shù)據(jù)使我們的網(wǎng)絡(luò)請(qǐng)求函數(shù),多加上一個(gè)參數(shù)區(qū)分 初始化網(wǎng)絡(luò) 下拉刷新 下拉添加數(shù)據(jù)的操作
彩蛋
順便講一下一點(diǎn)更新數(shù)據(jù)的問(wèn)題 ,使用下面語(yǔ)句來(lái)更新的時(shí)候我們必須更新我一初始化的數(shù)據(jù)內(nèi)存,不能讓引用指向另一內(nèi)存
adapter.notifyDataSetChanged();
我的案例
package com.LY.project.View; import android.os.Handler; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.LY.basemodule.Essential.BaseTemplate.BaseActivity; import com.LY.project.Adapter.DemoAdapter; import com.LY.project.Adapter.MyLockAdapter; import com.LY.project.Controller.LockController; import com.LY.project.Manager.InterfaceManger; import com.LY.project.Module.ReadAllLock; import com.LY.project.R; import com.LY.project.Utils.RetrofitUtils; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.jcodecraeer.xrecyclerview.ProgressStyle; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import okhttp3.MultipartBody; import okhttp3.RequestBody; /** * Created by jie on 2018/8/17. */ public class Demo extends BaseActivity { List<ReadAllLock> lists = new ArrayList<>(); private XRecyclerView recyclerView; private DemoAdapter adapter; @Override public int getLayoutId() { return R.layout.demo; } @Override public void initViews() { recyclerView = findView(R.id.rv); initR(); } /** * 初始化控件 */ private void initR() { /* * 默認(rèn)為垂直向下的列表格式 */ LinearLayoutManager layoutmanager = new LinearLayoutManager(getApplication()); /** * 設(shè)置為水平布局格式 */ // layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL); /* * 瀑布格式 * 第一個(gè)參數(shù)表示布局的列數(shù) * 第二個(gè)參數(shù)表示布局的方向,這里我們傳入StaggeredGridLayoutManager.VERTICAL,表示布局縱向排列 */ // StaggeredGridLayoutManager layoutmanager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); //設(shè)置RecyclerView 布局 recyclerView.setLayoutManager(layoutmanager); recyclerView.setPullRefreshEnabled(true); recyclerView.setLoadingMoreEnabled(false); recyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader); recyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallRotate); recyclerView.setArrowImageView(R.drawable.iconfont_downgrey); recyclerView .getDefaultRefreshHeaderView() .setRefreshTimeVisible(true); View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false); recyclerView.addHeaderView(header); // recyclerView.getDefaultFootView().setLoadingHint("自定義加載中提示"); recyclerView.getDefaultFootView().setNoMoreHint("自定義加載完畢提示"); } /** * 初始化點(diǎn)擊事件 */ @Override public void initListener() { recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable(){ public void run() { InternextData(2); } }, 2000); } @Override public void onLoadMore() { } }); } /** * 初始化數(shù)據(jù) */ @Override public void initData() { InternextData(1); } /** * 獲取數(shù)據(jù) * @param type tyoe==1 初次獲取數(shù)據(jù) type == 2 刷新獲取數(shù)據(jù) type == 3 下拉更新數(shù)據(jù) */ private void InternextData(final int type) { LockController lockController = new LockController(Demo.this); List<String> photos = new ArrayList<>(); List<MultipartBody.Part> parts = null; Map<String, RequestBody> params = new HashMap<>(); params.put("phone", RetrofitUtils.convertToRequestBody("17875305749")); params.put("password", RetrofitUtils.convertToRequestBody("1234567")); lockController.ReadAllLock(params, parts, new InterfaceManger.OnRequestListener() { @Override public void onSuccess(Object success) { String body = success.toString(); Log.e("onSuccess:", body); switch (type){ case 1: lists = ReadAllLock.arrayDemoFromData(body); //設(shè)置Adapter adapter = new DemoAdapter(lists); adapter.setOnItemClickListener(new DemoAdapter.OnItemClickListener() { @Override public void onLongClick(int position) { Toast.makeText(Demo.this, "onLongClick事件 您點(diǎn)擊了第:" + position + "個(gè)Item", Toast.LENGTH_SHORT).show(); } @Override public void onClick(int position) { Toast.makeText(Demo.this, "onClick事件 您點(diǎn)擊了第:" + position + "個(gè)Item", Toast.LENGTH_SHORT).show(); } }); recyclerView.setAdapter(adapter); recyclerView.refresh(); break; case 2: lists.clear(); lists.addAll( ReadAllLock.arrayDemoFromData(body)); adapter.notifyDataSetChanged(); recyclerView.refreshComplete(); break; default: break; } } @Override public void onError(String error) { showToast(error); } @Override public void onComplete() { } }); } @Override public void processClick(View v) { } }
到此這篇關(guān)于Android 之 XRecyclerview的使用的文章就介紹到這了,更多相關(guān)Android XRecyclerview使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 使用Vitamio打造自己的萬(wàn)能播放器(3)——本地播放(主界面、播放列表)
本文主要介紹 Android Vitamio本地播放功能,這里提供實(shí)例代碼和效果圖以便大家參考,有需要的小伙伴可以參考下2016-07-07android ViewPager實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果實(shí)例代碼
本篇文章主要介紹了android ViewPager實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Android Studio 下 Flutter 開(kāi)發(fā)環(huán)境搭建過(guò)程
這篇文章主要介紹了Android Studio 下 Flutter 開(kāi)發(fā)環(huán)境搭建/Flutter / Dart 插件安裝 | Flutter SDK 安裝 | 環(huán)境變量配置 | 開(kāi)發(fā)環(huán)境檢查,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-03-03Android ViewFlipper用法實(shí)例分析
這篇文章主要介紹了Android ViewFlipper用法,結(jié)合實(shí)例形式分析了ViewFlipper圖片操作的相關(guān)技巧,需要的朋友可以參考下2016-01-01Android開(kāi)發(fā)實(shí)現(xiàn)的圓角按鈕、文字陰影按鈕效果示例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的圓角按鈕、文字陰影按鈕效果,涉及Android界面布局與屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Android音視頻開(kāi)發(fā)之MediaExtactor使用教程
MediaExtactor在Android音視頻開(kāi)發(fā)中負(fù)責(zé)提取音視頻信息和數(shù)據(jù)流的功能,可以通過(guò)該類實(shí)現(xiàn)從多媒體文件中剝離得到音頻和視頻的能力。本文將詳細(xì)為大家介紹一下它的使用,感興趣的可以了解一下2022-04-045個(gè)Android開(kāi)發(fā)中比較常見(jiàn)的內(nèi)存泄漏問(wèn)題及解決辦法
本文主要介紹了5個(gè)Android開(kāi)發(fā)中比較常見(jiàn)的內(nèi)存泄漏問(wèn)題及解決辦法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02Android WorkManager實(shí)現(xiàn)后臺(tái)定時(shí)任務(wù)流程詳解
WorkManager是Android Jetpack的一個(gè)強(qiáng)大的組件,用于處理后臺(tái)耗時(shí)任務(wù)。后臺(tái)任務(wù)可以是一次性的,也可以是重復(fù)的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01