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


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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值