Android 中的 XRecyclerview的使用案例
前言:
我們?cè)谏弦黄恼轮袑W(xué)到了Recyclerview但是在現(xiàn)實(shí)中往往需求不是那么的簡(jiǎn)單,可能需要多種需求合并起來(lái),例如常見(jiàn)的上下拉刷新,刪除 item 還有多種item,有著頭部和尾部等等之類(lèi)的。這次我們久來(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 listview初步學(xué)習(xí)實(shí)例代碼
這篇文章主要介紹了android listview初步學(xué)習(xí)實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Android Compose衰減動(dòng)畫(huà)Animatable使用詳解
這篇文章主要為大家介紹了Android Compose衰減動(dòng)畫(huà)Animatable使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android中SeekBar和RatingBar用法實(shí)例分析
這篇文章主要介紹了Android中SeekBar和RatingBar用法,結(jié)合實(shí)例形式分析了SeekBar和RatingBar的功能、定義與簡(jiǎn)單使用方法,需要的朋友可以參考下2016-06-06
Android中ViewPager懶加載的優(yōu)化詳解
這篇文章主要為大家詳細(xì)介紹了Android中ViewPager懶加載的優(yōu)化相關(guān)技巧,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起了解下2024-04-04
Android中如何取消listview的點(diǎn)擊效果
這篇文章主要介紹了 Android中取消listview的點(diǎn)擊效果的實(shí)現(xiàn)方法,通過(guò)引用transparent之后會(huì)讓點(diǎn)擊效果透明化,一起通過(guò)本文學(xué)習(xí)吧2017-01-01
Android緩存之DiskLruCache磁盤(pán)緩存的使用
這篇文章主要介紹了Android緩存之DiskLruCache磁盤(pán)緩存的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
adb通過(guò)wifi連接android設(shè)備流程解析
這篇文章主要介紹了adb通過(guò)wifi連接android設(shè)備流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Android編程之防止反編譯的實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之防止反編譯的實(shí)現(xiàn)方法,涉及Android針對(duì)運(yùn)行環(huán)境、簽名及程序相關(guān)信息的獲取與判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

