天天看点

一种使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时,需要同时根据方向重写相应的控制方法。

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

继续阅读