我的应用中有一个RecyclerView,它会显示数据。我想禁用用户对RecyclerView的触摸事件。我已经尝试了下面的代码,但它没有起作用。
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
请帮助我。
我的应用中有一个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()
时,我消耗了触摸事件。
Java:
recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
return true;
}
});
Kotlin:
recyclerView.addOnItemTouchListener(object : RecyclerView.SimpleOnItemTouchListener() {
override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
return true
}
})
public void setLayoutFrozen(boolean frozen)
来冻结布局。setLayoutFrozen(boolean frozen)
已被弃用,请使用suppressLayout(boolean suppress)
代替。 - Mohamed KhaledsuppressLayout(true)
时,adapter.notifyDataSetChanged
和 adapter.notifyItemChanged(int position)
将不起作用。 - Yt100yourRecyclerView.suppressLayout(true)
禁用用户交互。true
,则会禁用触摸事件。false
,则将启用触摸事件。recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
return true;
}
});
希望它有所帮助...
您可以重写 LinearLayoutManager 的 canScrollHorizontally
方法
getRecyclerView().setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
@Override
public boolean canScrollHorizontally() {
return false;
}
});