我想复制RecyclerView项目中的文本内容,所以我在TextView上设置了一个OnLongClickListener,同时它会显示一个包含复制按钮的PopupWindow。
我的问题是,当PopupWindow显示并滚动RecycleView时,我仍然触摸RecycleView,而RecycleView意外滚动。
我需要,如果PopupWindow已经显示,无论我是否还在接触RecyclerView,PopupWindow都应该拥有facus,除非PopupWindow被解雇,否则我不能做其他人。
我的init是一个PopupWindow代码:
mPopupWindow = new PopupWindow(context);
mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
View contentView = LayoutInflater.from(context).inflate(R.layout.comment_popup_layout, null);
mPopupWindow.setContentView(contentView);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setTouchable(true);
mPopupWindow.setFocusable(true);
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
我使用方法showAsDropDown(View anchor, int xoff, int yoff)
来显示窗口。
在我长时间离开谷歌之后需要一些帮助。
谢谢!
答案 0 :(得分:1)
在适配器类的构造函数中传递RecyclerView的对象并初始化它 然后在构造函数
中添加它if(mPopupWindow.isShowing()){
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
}
答案 1 :(得分:0)
将取消事件发送到rootView以停止滚动。
//Record an ACTION_DOWN event which is just used to obtain an ACTION_CANCEL event.
var mDownEvent: MotionEvent? = null
//itemView is the root view of the Holder
itemView.setOnTouchListener { _, event ->
if(event.action == MotionEvent.ACTION_DOWN)
mDownEvent = event
if(event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL)
mDownEvent = null
}
显示PopupWindow之后
if(mDownEvent != null) {
try {
val cancelEvent = MotionEvent.obtain(mDownEvent)
cancelEvent.action = MotionEvent.ACTION_CANCEL
itemView.rootView.dispatchTouchEvent(cancelEvent)
} catch (e: Exception) {
//log the exception
}
}