如何从点击的小部件中获取 CardView?

How can I get the CardView from a clicked widget?

在 Android 应用程序中,我有一个 RecyclerView 和一个 CardView,其布局如下所示:

CardView
    |
    +-- LinearLayout (H)
           |
           +-- ImageView[onclick=advance]
           |
           +-- LinearLayout (V)
                   |
                   +-- TextView
                   |
                   +-- TextView

当用户单击 ImageView 时,我想在相应的 Adapter 上调用一个方法,其中包含单击 CardView 的索引。使用 RecyclerView.getChildPosition 我可以获得该索引。 但是ImageView 的点击处理程序获得了对ImageView 的引用。不是 CardView.

所以我的代码目前看起来像这样:

public void advance(View v) {
    Log.v(TAG, String.format("Determining position of %s", v));
    // TODO this "getParent" daisy-chain is really ugly. There must be a better way!
    LinearLayout p1 = (LinearLayout) v.getParent();
    CardView p2 = (CardView) p1.getParent();
    int pos = mRecyclerView.getChildPosition(p2);
    mAdapter.advance(pos);
}

这个有效,但是100%与布局耦合(不仅是结构,还有类)。如果我改变布局,我需要改变代码。有没有办法直接到CardView

到目前为止我还没有使用 RecyclerView,我猜想 ListView 中的简单逻辑也可以在这里应用:

在你身上RecyclerView.Adapter

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    // set on click for you imageView
    holder.mImageView.setOnClickListener(new OnClickListener() {
        public void onClick(View yourImageView) {
            // position here is the position of CardView
            advance(position); // advance from adapter
        }
    });
}

如果有道理,请告诉我。