2017-10-19 4 views
0

私は以下RecyclerViewの目に見えないViewHolder項目の後ろに表示されているViewをクリックする方法?位置6が画面に現れたら

@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); 
    } 
    ... 

} 

のようなものは見えないViewHolderアイテムを持つことになりますフルスクリーンRecyclerViewを持って、私はその背後にある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; 
} 
関連する問題