天天看點

Android RecyclerView(四)繼續學習BRVAH

學玩這章你會啥

RecyclerView的下面幾點可還ok。

  1. 上拉重新整理
  2. 下拉加載
  3. 拖動
  4. 滑動删除
    Android RecyclerView(四)繼續學習BRVAH

上拉重新整理

1.方法setOnLoadMoreListener();
//下拉加載
meAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
    //顯示條目長度
    int dataSize;
    //假設資料庫查詢到了20條資料
    int sqlDataSize=20;
    boolean isErr=false;
    @Override public void onLoadMoreRequested() {
        recyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (dataSize >= sqlDataSize) {
                    //資料全部加載完畢
                    meAdapter.loadMoreEnd();
                } else {
                    if (isErr) {
                        //成功擷取更多資料
                        meAdapter.addData(getData());
                        dataSize = meAdapter.getData().size();
                        meAdapter.loadMoreComplete();
                    } else {
                        //擷取更多資料失敗
                        isErr = true;
                        Toast.makeText(MainActivity.this, "擷取資料失敗", Toast.LENGTH_LONG).show();
                        meAdapter.loadMoreFail();

                    }
                }
            }

        }, 1000);
    }
}, recyclerView);
           
2.在看看我們的getData()方法
public List<User> getData() {
    //每次添加兩條
    List<User> users=new ArrayList<>();
    users.add(new User(R.drawable.tx,"上啦1"));
    users.add(new User(R.drawable.tx0,"上啦2"));
    return users;
}
           
3.再給你這三個方法理一下

加載完成(注意不是加載結束,而是本次資料加載結束并且還有下頁資料)

加載失敗

加載結束

4.如果出現了錯誤

Landroid/support/v4/animation/AnimatorCompatHelper;

Android 報錯-6

會告訴你解決方法

Android RecyclerView(四)繼續學習BRVAH

坑都被我踩完了。。。

5.效果圖
Android RecyclerView(四)繼續學習BRVAH

點選重試

Android RecyclerView(四)繼續學習BRVAH

繼續下拉,最後

Android RecyclerView(四)繼續學習BRVAH

下拉加載

1.打開下拉加載開關
//開啟下拉加載開關
meAdapter.setUpFetchEnable(true);
           
2.設定監聽
//下拉加載
meAdapter.setUpFetchListener(new BaseQuickAdapter.UpFetchListener() {
    @Override
    public void onUpFetch() {
        startUpFetch();
    }
});
           
3.startUpFetCh()方法的實作
private int count=0;
private void startUpFetch() {
    count++;

    meAdapter.setUpFetching(true);

    recyclerView.postDelayed(new Runnable() {
        @Override
        public void run() {
        	//getData()就是上拉重新整理的方法,一次加載兩條
            meAdapter.addData(0, getData());

            meAdapter.setUpFetching(false);
			
            if (count > 2) {//預設加載兩次
            	//加載後關閉開關
                meAdapter.setUpFetchEnable(false);
            }
        }
    }, 300);//0.3秒一次
}
           
4.效果圖

這是進去的效果圖

Android RecyclerView(四)繼續學習BRVAH

然後我們下拉

Android RecyclerView(四)繼續學習BRVAH

由于引用的是上拉的getData方法是以名稱沒改了。

拖動和滑動删除

1.改一下我們的meAdapter繼承BaseItemDraggableAdapter然後alt+enter,平常沒事可以多ctrl點選進去瞧一瞧,看一看。會有大發現,我隻不過發現了BaseItemDraggableAdapter繼承的還是BaseQuickAdapter而已
public class MeAdapter extends BaseItemDraggableAdapter<User,BaseViewHolder> {

    public MeAdapter(int layoutResId, @Nullable List<User> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, User item) {
        helper.setImageResource(R.id.iv_user_img,item.getImg())
                .setText(R.id.tv_user_name,item.getName())
                .addOnClickListener(R.id.iv_user_img)
                .addOnLongClickListener(R.id.iv_user_img);
    }
}
           
2.編寫它們的回調方法
//拖拽回調方法
OnItemDragListener onItemDragListener = new OnItemDragListener() {
    @Override
    public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos){}
    @Override
    public void onItemDragMoving(RecyclerView.ViewHolder source, int from, RecyclerView.ViewHolder target, int to) {}
    @Override
    public void onItemDragEnd(RecyclerView.ViewHolder viewHolder, int pos) {}
};
//滑動回調方法
OnItemSwipeListener onItemSwipeListener = new OnItemSwipeListener() {
    @Override
    public void onItemSwipeStart(RecyclerView.ViewHolder viewHolder, int pos) {}
    @Override
    public void clearView(RecyclerView.ViewHolder viewHolder, int pos) {}
    @Override
    public void onItemSwiped(RecyclerView.ViewHolder viewHolder, int pos) {}

    @Override
    public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, float dX, float dY, boolean isCurrentlyActive) {

    }
};
           
3.活動的調用
ItemDragAndSwipeCallback itemDragAndSwipeCallback = new ItemDragAndSwipeCallback(meAdapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragAndSwipeCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);

// 開啟拖拽
meAdapter.enableDragItem(itemTouchHelper, R.id.item_user, true);
meAdapter.setOnItemDragListener(onItemDragListener);

// 開啟滑動删除
meAdapter.enableSwipeItem();
meAdapter.setOnItemSwipeListener(onItemSwipeListener);

recyclerView.setAdapter(meAdapter);
           
4.效果圖

這是滑動删除

Android RecyclerView(四)繼續學習BRVAH

在看看我們的拖動

Android RecyclerView(四)繼續學習BRVAH

基本的RecyclerView萬能擴充卡就到這了

更詳細的請看

BRVAH官方使用指南

有啥疑問可以評論留言

Android RecyclerView(四)繼續學習BRVAH

嗎?