Meh*_*aji 4 android view android-layout android-view android-recyclerview
因为RecyclerView如果它没有任何项目,则单击RecyclerView有效,但如果它有项目,则单击RecyclerView不起作用。小心我的意思是点击 just RecyclerViewnotRecyclerView的项目
recyclerView.setOnClickListener(view -> {Timber.d("recyclerView clicked");});
Run Code Online (Sandbox Code Playgroud)
RecyclerView即使上面有项目,我如何设置可点击。
小智 5
尝试扩展RecyclerView和覆盖onInterceptTouchEvent。也让它总是返回true。然后使用OnTouch代替OnClickListener
这里是一些代码。
public class MyRecyclerView extends RecyclerView {
public MyRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
活动类
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(MainActivity.this,"RecyclerView",Toast.LENGTH_SHORT).show();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
TL;DR Java
recyclerView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP)
return view.performClick();
else
return false;
}
});
recyclerView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
TL;科特林博士
recyclerView.setOnTouchListener { view, motionEvent ->
if (motionEvent.action == MotionEvent.ACTION_UP)
view.performClick()
else
false
}
recyclerView.setOnClickListener { view ->
// do something
}
Run Code Online (Sandbox Code Playgroud)
说明(Java)
当用户触摸屏幕时,OnTouchListener会触发最顶层视图的 。其目的是检测手势(点击、长按、滑动等)并调用相应的处理程序。例如,简单的点击应该会导致调用OnClickListener.
现在,由于某种原因,RecyclerView不这样做(至少它不监视点击手势) - 也许是因为开发人员不打算将其RecyclerView作为一个整体进行点击。
因此,我们自己实施OnTouchListener。最简单的方法是在其本身中实现点击逻辑OnTouchListener并返回true以防止事件在视图层次结构中进一步传播:
recyclerView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// do something
return true
}
});
Run Code Online (Sandbox Code Playgroud)
但是,由于OnTouchListener在屏幕上单击一次期间通常会多次调用,因此我们应该在最后一次触摸事件后仅运行一次代码。此外,业务逻辑应该进入被OnClickListener调用的performClick()(随后返回true):
recyclerView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP)
return view.performClick();
else
return false;
}
});
recyclerView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
但如果它有项目,点击 RecyclerView 不起作用
您为什么认为您正在对其本身进行点击RecyclerView?最有可能的是 的项目RecyclerView吞噬了触摸事件,因此它不会到达RecyclerView。您可以将 的子项设为RecyclerView不可点击,那么下一个有机会响应点击事件的项目将是RecyclerView。
| 归档时间: |
|
| 查看次数: |
4232 次 |
| 最近记录: |