首頁

Android開(kāi)發中(zhōng)XRecyclerview用法及遇到的一(yī)些問題

Android開(kāi)發XRecyclerview用法 2018-10-15 3989

目前通過xrecyclerview的開(kāi)源代碼來實現系列功能,加載數據傳入type,值爲1,2,3,分(fēn)别表示初次加載,下(xià)拉刷新數據,上拉加載更多數據操作,刷新數據隻需要重新放(fàng)入數據,然後notifyDataSetChanged();即可.加載更多數據隻需要在上拉時将獲取數據放(fàng)入之前數據list中(zhōng)刷新數據即可.這麽說可能會比較抽象,下(xià)面讓鄭州app開(kāi)發公司燚軒科技通過代碼來具體(tǐ)給大(dà)家演示一(yī)下(xià)是如何實現的吧。

核心代碼:

首先需要配置xRecyclerview的屬性:

xRecyclerView.setPullRefreshEnabled(true);

xRecyclerView.setLoadingMoreEnabled(true);

xRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);

xRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.Pacman);

xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {

@Override

public void onRefresh() {

new Handler().postDelayed(new Runnable(){

public void run() {

getWorksData(1,2);

}

}, 2000);

}

@Override

public void onLoadMore() {

count+=1;

loge("第幾次加載=="+count);

new Handler().postDelayed(new Runnable(){

public void run() {

getWorksData(count,3);

}

}, 2000);

}

});

從上面代碼可以看到,需要先設置下(xià)拉刷新和加載更多可執行,爲true,然後設置它的加載樣式,有多種樣式可以選擇,具體(tǐ)參考xrecyclerview的github介紹,接下(xià)裏設置一(yī)下(xià)loadingListener即可.我(wǒ)(wǒ)們需要實現它的兩個方法:刷新回調方法onRefresh()和加載更多方法onLoadingMore(),即分(fēn)别在這兩個方法中(zhōng)實現自己的刷新和加載數據邏輯即可.

getWorksData(參數1,參數2)即爲獲取後天數據的方法.參數1是指數據請求的次數,也指代請求後台的數據頁數,初始化爲1;參數2表示當前數據的操作模式(爲1:初次請求數據,爲2:刷新數據,爲3:加載更多數據).

loadingDialog.dismiss();

creativeImageBean = JSONObject.parseObject(response, CreativeImageBean.class);

if (creativeImageBean!=null && creativeImageBean.getCode() == 1000) {

if(type==1){

//是初次加載

loge("初次加載數據");

data=creativeImageBean.getData().getList();

Message msg = Message.obtain(handler);

msg.what = GET_DATA;

handler.handleMessage(msg);

}else if(type==2){

//下(xià)拉刷新

//data = new ArrayList();

updateData=creativeImageBean.getData().getList();

count = 1;

loge("刷新了");

xRecyclerView.refreshComplete();

if (workAdapter != null) {

Message msg = Message.obtain(handler);

msg.what = UPDATE_DATA;

handler.sendMessage(msg);

} else {

Message msg = Message.obtain(handler);

msg.what = GET_DATA;

handler.sendMessage(msg);

}

}else if(type==3){

//加載更多

//moreData = new ArrayList();

moreData = creativeImageBean.getData().getList();

loge("加載更多數據頁數==" + count+"---數據量--"+moreData.size());

if (moreData != null && moreData.size() > 0) {

data.addAll(moreData);

loge("data加載更多數據後的地址=="+data.hashCode());

loge("作品總數據長度==" + data.size());

// Message msg = Message.obtain(handler);

// msg.what = UPDATE_DATA;

// handler.sendMessage(msg);

if(workAdapter!=null){

loge("workAdapter不爲空");

workAdapter.notifyDataSetChanged();

}else {

loge("workAdapter爲空");

workAdapter = new WorksShowAdapter(MemoryWorksActivity.this,data);

xRecyclerView.setAdapter(workAdapter);

}

xRecyclerView.loadMoreComplete();

//workAdapter.addNewData(data);//添加數據

//如果添加moreData,爲空是什麽原因

} else {

loge("moreData數據爲空");

// xRecyclerView.setLoadingMoreEnabled(false);

// toast(getString(R.string.act_home_loadmore));

xRecyclerView.loadMoreComplete();

}

}

}

刷新數據需要先清除原有數據,然後放(fàng)入最新數據,接着調用adaper.motifyDataSetChange()方法.

問題總覽

點擊第i個item,提示卻是第i+1個item被點擊

問題原因:xrecyclerrview默認添加的header和footer,這就導緻item的真實位置發生(shēng)了變化,

解決方案:将item的位置由holder.getLayoutPosition()改爲position就可以了,adapter中(zhōng)修改代碼如下(xià):

holder.itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//int pos = holder.getLayoutPosition();//點擊的item控件的位置

myListener.onItemClick(holder.itemView, position);

/*

此方法返回的pos值與onBindViewHolder方法傳入的position值有可能不同。

根據SDK中(zhōng)的解釋,在Recyclerview 進行添加、移除item等操作時,position位置可能會變化,

而所有的adapter的刷新并不總是及時的,

隻有這個方法返回的才是當前item經過一(yī)些變換後所處的真正位置。

*/

}

});

notifySetDataCahnged()無法刷新數據的問題:

問題原因:先下(xià)拉刷新,然後上拉加載數據爲空不顯示,因爲data的地址發生(shēng)了變化,數據的刷新是在adapter中(zhōng)實現的,并且是新建一(yī)個list,然後調用了list.addAll(data),導緻刷新data數據地址改變,刷新無效

解決方案:新建一(yī)個list對象moreData來專門接收下(xià)拉刷新的數據,并且摒棄adapter中(zhōng)的addNewData()方法,直接data.clear()—data.addAll(moreData)—adapter.notifyDataChanged()

雖然内容有些多,但是隻要大(dà)家按照鄭州app開(kāi)發公司燚軒科技剛才分(fēn)享的源碼來一(yī)步一(yī)步的去(qù)做,都是可以做到的,如果還是存在不理解的地方,可以咨詢我(wǒ)(wǒ)們哦。

分(fēn)享:
分(fēn)享到微信朋友圈 +
打開(kāi)微信,點擊底部的“發現”,使用 “掃一(yī)掃” 即可将網頁分(fēn)享到我(wǒ)(wǒ)的朋友圈。 如何使用?
推薦文章

熱貼More +

服務範圍More +

聯系我(wǒ)(wǒ)們

請掃二維碼聯系客服

854221200@qq.com

185-3825-9583

QQ客服

關于  ·  招聘  ·  案例中(zhōng)心  ·  網站地圖

©@2018 燚軒科技版權所有 豫ICP備16015002号-4

百度提供搜索支持