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

时间:2015-05-06 18:30:16

标签: android android-recyclerview

在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

1 个答案:

答案 0 :(得分:3)

到目前为止,我对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
        }
    });
}

如果有意义,请告诉我。