Android 如何从单击的小部件获取CardView?
在Android应用程序中,我有一个Android 如何从单击的小部件获取CardView?,android,android-recyclerview,Android,Android Recyclerview,在Android应用程序中,我有一个RecyclerView和一个CardView,布局如下: CardView | +-- LinearLayout (H) | +-- ImageView[onclick=advance] | +-- LinearLayout (V) | +-- TextView
RecyclerView
和一个CardView
,布局如下:
CardView
|
+-- LinearLayout (H)
|
+-- ImageView[onclick=advance]
|
+-- LinearLayout (V)
|
+-- TextView
|
+-- TextView
当用户单击ImageView
时,我想调用相应适配器上的一个方法,该方法的索引为单击的CardView
。使用RecyclerView.getChildPosition
我可以得到那个索引。但是,ImageView
的单击处理程序会获取对ImageView
的引用。不是卡片视图
因此,我的代码目前如下所示:
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
上做过很多工作,我的猜测是与列表视图中的逻辑相同的简单逻辑也可以在这里应用:
在您的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
}
});
}
请让我知道它是否有意义。到目前为止,我还没有在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
}
});
}
请让我知道它是否有意义。到目前为止,我还没有在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
}
});
}
请让我知道它是否有意义。到目前为止,我还没有在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
}
});
}
请让我知道这是否合理。不确定这是否有效,但是,2个自定义视图(MyTextView和MyCardView)和它们之间的接口如何处理通信?不确定这是否有效,但是,2个自定义视图(MyTextView和MyCardView)和它们之间的接口如何处理通信?不确定这是否有效,但是,2个自定义视图(MyTextView和MyCardView)和它们之间的接口如何处理通信?不确定这是否有效,但是,2个自定义视图(MyTextView和MyCardView)和它们之间的接口如何处理通信?谢谢。这确实是一个更干净的解决方案。@exhuma我认为将最后一行更改为:advance(holder.getAdapterPosition())
,应该更可靠,请参见上的onBindViewHolder说明。实际上,您甚至可以通过这种方式将整个“setOnClickListener”移动到OnCreateViewHolder。谢谢。这确实是一个更干净的解决方案。@exhuma我认为将最后一行更改为:advance(holder.getAdapterPosition())
,应该更可靠,请参见上的onBindViewHolder说明。实际上,您甚至可以通过这种方式将整个“setOnClickListener”移动到OnCreateViewHolder。谢谢。这确实是一个更干净的解决方案。@exhuma我认为将最后一行更改为:advance(holder.getAdapterPosition())
,应该更可靠,请参见上的onBindViewHolder说明。实际上,您甚至可以通过这种方式将整个“setOnClickListener”移动到OnCreateViewHolder。谢谢。这确实是一个更干净的解决方案。@exhuma我认为将最后一行更改为:advance(holder.getAdapterPosition())
,应该更可靠,请参见上的onBindViewHolder说明。实际上,您甚至可以通过这种方式将整个“setOnClickListener”移动到OnCreateViewHolder。