一级ā片在线观看播放|97超爽人妻免费视频|国产精品免费看久久久网|国产综合无码免费一区二区|亚洲制服丝袜日韩熟女中文|欧美精品一区二区高清在线|国产一区二区波多野结衣av|裸体丰满少妇做受久久99精品

      1. <source id="x6jup"></source>
        
        

      2. 首頁

        Android開發(fā)中XRecyclerview用法及遇到的一些問題

        Android開發(fā)XRecyclerview用法 2018-10-15 6521

        目前通過xrecyclerview的開源代碼來實現(xiàn)系列功能,加載數(shù)據(jù)傳入type,值為1,2,3,分別表示初次加載,下拉刷新數(shù)據(jù),上拉加載更多數(shù)據(jù)操作,刷新數(shù)據(jù)只需要重新放入數(shù)據(jù),然后notifyDataSetChanged();即可.加載更多數(shù)據(jù)只需要在上拉時將獲取數(shù)據(jù)放入之前數(shù)據(jù)list中刷新數(shù)據(jù)即可.這么說可能會比較抽象,下面讓鄭州app開發(fā)公司燚軒科技通過代碼來具體給大家演示一下是如何實現(xiàn)的吧。

        核心代碼:

        首先需要配置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);

        }

        });

        從上面代碼可以看到,需要先設置下拉刷新和加載更多可執(zhí)行,為true,然后設置它的加載樣式,有多種樣式可以選擇,具體參考xrecyclerview的github介紹,接下里設置一下loadingListener即可.我們需要實現(xiàn)它的兩個方法:刷新回調方法onRefresh()和加載更多方法onLoadingMore(),即分別在這兩個方法中實現(xiàn)自己的刷新和加載數(shù)據(jù)邏輯即可.

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

        loadingDialog.dismiss();

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

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

        if(type==1){

        //是初次加載

        loge("初次加載數(shù)據(jù)");

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

        Message msg = Message.obtain(handler);

        msg.what = GET_DATA;

        handler.handleMessage(msg);

        }else if(type==2){

        //下拉刷新

        //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("加載更多數(shù)據(jù)頁數(shù)==" + count+"---數(shù)據(jù)量--"+moreData.size());

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

        data.addAll(moreData);

        loge("data加載更多數(shù)據(jù)后的地址=="+data.hashCode());

        loge("作品總數(shù)據(jù)長度==" + 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);//添加數(shù)據(jù)

        //如果添加moreData,為空是什么原因

        } else {

        loge("moreData數(shù)據(jù)為空");

        // xRecyclerView.setLoadingMoreEnabled(false);

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

        xRecyclerView.loadMoreComplete();

        }

        }

        }

        刷新數(shù)據(jù)需要先清除原有數(shù)據(jù),然后放入最新數(shù)據(jù),接著調用adaper.motifyDataSetChange()方法.

        問題總覽

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

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

        解決方案:將item的位置由holder.getLayoutPosition()改為position就可以了,adapter中修改代碼如下:

        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值有可能不同。

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

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

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

        */

        }

        });

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

        問題原因:先下拉刷新,然后上拉加載數(shù)據(jù)為空不顯示,因為data的地址發(fā)生了變化,數(shù)據(jù)的刷新是在adapter中實現(xiàn)的,并且是新建一個list,然后調用了list.addAll(data),導致刷新data數(shù)據(jù)地址改變,刷新無效

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

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

        分享到微信朋友圈 +
        打開微信,點擊底部的“發(fā)現(xiàn)”,使用 “掃一掃” 即可將網(wǎng)頁分享到我的朋友圈。 如何使用?
        推薦文章

        熱貼More +

        服務范圍More +

        聯(lián)系我們

        請掃二維碼聯(lián)系客服

        854221200@qq.com

        185-3825-9583

        QQ客服

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

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

        百度提供搜索支持

        山东省| 靖边县| 仁化县| 金山区| 麻阳| 平阴县| 呈贡县| 西吉县| 腾冲县| 大安市| 古田县| 三门峡市| 汝阳县| 锡林郭勒盟| 京山县| 清水河县| 蛟河市| 白沙| 行唐县| 隆尧县| 和田县| 滕州市| 澄城县| 岐山县| 吉林省| 陆河县| 岢岚县| 富阳市| 峡江县| 彩票| 原阳县| 客服| 新丰县| 嘉荫县| 大兴区| 民乐县| 兴和县| 衢州市| 扎赉特旗| 汾西县| 九龙县|