ReCyclerView禁止滑動的一種實現方式

在應用開發中,經常遇到Recyclerview中的子item中和Recyclerview的滾動事件衝突,例如在在Recyclerview中包含一個Mapview,這時候我們操作Mapview的時候肯定是不希望Recyclerview一起滾動的,那麼我們就需要禁止Recyclerview的滾動了。下面直接上代碼。

我們需要實現的就是重寫一個LayoutManager了,其中在該方法中控制能否滑動的核心方法就是

canScrollVertically()【控制上下滑動】和 canScrollHorizontally()【控制左右滑動】兩個方法了

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;

public class ScrollLinearLayoutManager extends LinearLayoutManager {
    private boolean mCanVerticalScroll = true;

    public ScrollLinearLayoutManager(Context context) {
        super(context);
    }

    @Override
    public boolean canScrollVertically() {
        if (!mCanVerticalScroll){
            return false;
        }else {
            return super.canScrollVertically();
        }
    }

    public void setmCanVerticalScroll(boolean b){
        mCanVerticalScroll = b;
    }
}

這代碼中我只需要控制列表上下滑動,所以只重寫了canScrollVertically()方法,可以看到canScrollVertically()返回的值是mCanVerticalScroll這個布爾變量,於是乎setmCanVerticalScroll()這個方法就是我們控制列表能否滑動的關鍵方法了

下面是在代碼中的使用,我的需求是用戶按下某個item時候,你的上下滑動動作不生效。

貼代碼:

/**監聽item的觸碰事件*/
    @Override
    public void onItemTouchClick(View v, int position, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {//如果是按下的話
            mLayoutManager.setmCanVerticalScroll(false);//設置Recyclerview無法滾動
            mDecorView.addView(mDetailsView);//彈出提示框
            setDetails(mAdapter.getListItem(position));//加載提示框數據
        } else if (event.getAction() == MotionEvent.ACTION_UP) {//如果是擡起的話
            mDecorView.removeView(mDetailsView);//移除彈出提示框
            mLayoutManager.setmCanVerticalScroll(true);//設置Recyclerview可以滾動
            clearDetails();//清楚提示框的內容
        }
    }

ScrollLinearLayoutManager的話就和正常的layoutManger一樣用就行了

        mLayoutManager = new ScrollLinearLayoutManager(mContext);
        mSalesReturnRecyList.getRecyclerView().setLayoutManager(mLayoutManager);

OK這個功能實現了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章