繁体   English   中英

禁用 RecyclerView 的触摸事件(以防止用户触摸)?

[英]disable touch events of RecyclerView (to prevent user touches)?

我的应用程序中有一个 RecyclerView,它显示数据。 我想禁用 RecyclerView 的用户触摸事件。 我已经尝试了下面的代码,但它不起作用。

recyclerView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return false;
    }
});

请帮帮我。

因为几天前我有一个类似的用例并且刚刚偶然发现了这个问题:
你可以添加

到您的 RecyclerView。

使用RecyclerView.SimpleOnItemTouchListener示例:

recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        // true: consume touch event
        // false: dispatch touch event
        return true;
   }
});

当我的SwipeRefreshLayout通过查询swipeLayout.isRefreshing()进行后台工作时,我消耗了触摸事件。

你可以使用 RecyclerView 函数public void setLayoutFrozen(boolean frozen)

爪哇:

recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        return true;
    }
});

科特林:

recyclerView.addOnItemTouchListener(object : RecyclerView.SimpleOnItemTouchListener() {
    override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
        return true
    }
})

就用这个,解决我的问题(;

如果返回true触摸事件被禁用。

如果启用返回false触摸事件。

recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        return true;
   }
});

希望它有帮助..

您可以使用yourRecyclerView.suppressLayout(true)禁用用户交互

您可以覆盖 LinearLayoutManager canScrollHorizontally方法

getRecyclerView().setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
    @Override
    public boolean canScrollHorizontally() {
        return false;
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM