Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从单击的小部件获取CardView?_Android_Android Recyclerview - Fatal编程技术网

Android 如何从单击的小部件获取CardView?

Android 如何从单击的小部件获取CardView?,android,android-recyclerview,Android,Android Recyclerview,在Android应用程序中,我有一个RecyclerView和一个CardView,布局如下: CardView | +-- LinearLayout (H) | +-- ImageView[onclick=advance] | +-- LinearLayout (V) | +-- TextView

在Android应用程序中,我有一个
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。