如何从点击的小部件中获取 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
}
});
}
如果有道理,请告诉我。
在 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
}
});
}
如果有道理,请告诉我。