簡體   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