一種使RecycleView禁止滑動的方法

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

那麼爲啥要禁用呢??

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

因爲最近一個項目中需要在RecycleView中顯示固定的3個item而不需要滑動,我也就碰上了這麼個問題。。。
類似這種效果:
這裏寫圖片描述
很明顯,這裏需要做的就是將下方的模板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時,需要同時根據方向重寫相應的控制方法。


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

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