2017-10-19 146 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; 
} 
相關問題