我有一个全屏的RecyclerView,它有一个看不见的ViewHolder项目,如下面的
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
....
if (position == 6) {
viewHolder.itemView.setMinimumHeight(Resources.getSystem().getDisplayMetrics().heightPixels);
viewHolder.itemView.setVisibility(View.GONE);
viewHolder.setIsRecyclable(false);
}
...
}
一旦位置6显示在屏幕上,我可以看到它背后的ImageView,我希望能够点击它。我已经为该ImageView添加了一个事件处理程序,但它没有被触发。似乎RecyclerView阻止了点击事件的泡沫。有没有办法点击View to through thru / gone RecyclerView ViewItem?
答案 0 :(得分:0)
由于我问了这个问题,我尝试了多种技术/方法,可以/应该将点击/点击事件传递给视图层次结构,但没有任何效果。我试图在应用程序中构建的功能非常复杂,应用程序本身也变得非常复杂。过多的视图和全局事件处理程序使得实现更加困难。
所以我已经决定在RecyclerView中有一个空/透明的视图持有者,它可以监听点击和触摸事件,并根据触摸事件的坐标,触发不同的动作。这是代码:
private float[] lastTouchDownXY = new float[2];
public MyView getMyView(final Context context) {
MyView view = new MyView(context);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
lastTouchDownXY[0] = motionEvent.getRawX();
lastTouchDownXY[1] = motionEvent.getRawY();
}
return false;
}
});
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final float x = lastTouchDownXY[0];
final float y = lastTouchDownXY[1];
int[] mLocButton = new int[2];
// mButton is the button in the background and visible thru transparent viewholder
mButton.getLocationOnScreen(mLocButton);
final int left = mLocButton[0];
final int top = mLocButton[1];
if (x > (left - mOffset) && x < (left + mOffset + mButtonWidth) &&
y > (top - mOffset) && y < (top + mOffset + mMuteUnmuteButtonHeight)) {
// mButton clicked
} else {
// entire view clicked except mButton clickable area
}
}
});
return view;
}