在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
?
答案 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
}
});
}
如果有意义,请告诉我。