2017-10-19 157 views
0

我有一个全屏幕RecyclerView这将有一个无形的ViewHolder项目,像下面如何点击在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正在阻止点击事件冒泡。有没有什么办法点击视图通过不可见/去过RecyclerView ViewItem?

+0

检查[此答案](https://stackoverflow.com/a/29066665/752630) – mbonnin

回答

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; 
} 
相关问题