天天看點

一種使RecycleView禁止滑動的方法

乍一看題目,很奇怪吧,我們應用RecycleView的一個重要原因就是為了利用它的滑動屬性在有限的螢幕上盡可能的顯示更多的内容。

那麼為啥要禁用呢??

看個看官請聽我繼續說來…

因為最近一個項目中需要在RecycleView中顯示固定的3個item而不需要滑動,我也就碰上了這麼個問題。。。

類似這種效果:

一種使RecycleView禁止滑動的方法

很明顯,這裡需要做的就是将下方的模闆item固定住。

1、引入

其實解決這個問題很簡單。

記得recycleView與Listview的一個不同,就是通過設定LayoutManager來顯示我們需要的各種Linear、Grid以及瀑布流的效果。這裡用LinearLayout舉例。

一般情況下,我們會這樣寫代碼:

LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
RecycleView.setLayoutManager(manager);
mDemoAdapter = new MyDemoAdapter(DemoActivity.this,mTypeNums);
//設定資料擴充卡
rv_modleList.setAdapter(mDemoAdapter);           

正常步驟能保證我們得到想要的效果。

是以我們通常也會忽略掉【LinearLayoutManager】。

而禁止滑動的設定關鍵,恰恰就是它。

我們看看源碼。

其中有這麼兩個方法:

/**
     * @return true if {@link #getOrientation()} is {@link #HORIZONTAL}
     */
    @Override
    public boolean canScrollHorizontally() {
        return mOrientation == HORIZONTAL;
    }

    /**
     * @return true if {@link #getOrientation()} is {@link #VERTICAL}
     */
    @Override
    public boolean canScrollVertically() {
        return mOrientation == VERTICAL;
    }           

一看方法名與傳回值我們就知道,這哥倆指定與是否滑動有關系。

閑話少說,直接上結論:

隻要根據方向,在相應的方法中傳回true/false值即可控制是否滑動。

true—可以滑動

false—禁止滑動

當然,這裡應特别注意方向!!!

2、應用

還是上面的栗子,我們隻需要這樣寫就可以:

LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false){
                @Override
                public boolean canScrollHorizontally() {
                    return false;
                }
            };
RecycleView.setLayoutManager(manager);
mDemoAdapter = new MyDemoAdapter(DemoActivity.this,mTypeNums);
//設定資料擴充卡
rv_modleList.setAdapter(mDemoAdapter);           

很明顯的不同,就是在這裡建立LinearLayoutManager時,需要同時根據方向重寫相應的控制方法。

好了,運作一下,看看是不是達到了你想要的效果呢。

繼續閱讀