首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取回收器视图中被点击项目的位置

获取回收器视图中被点击项目的位置
EN

Stack Overflow用户
提问于 2015-11-23 17:07:24
回答 3查看 10.8K关注 0票数 1

我已经实现了一个RecyclerView,它工作得很好。我有一个包含回收器视图数据的ArrayList。每一项的布局都很复杂。它包含两个frameLayout。framelayout1包含一个图像和一个文本,framelayout2包含一个图像和四个文本。当用户单击framelayout1时,我想打开Activity1,当用户单击framelayout2时,我想打开Activity2。我已经在回收器视图中搜索了onClick,我发现了非常有用的this。但是我如何才能获得arrayList的位置,以便在activity1或activity2中通过Intent传递它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-21 22:01:59

尝试从视图管理器内部使用getAdapterPosition(),这样就可以获得用户单击时的适配器位置。

代码语言:javascript
运行
复制
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

   public ViewHolder(View itemView) {
       super(itemView);
       itemView.setOnClickListener(this);
   }

   @Override
   public void onClick(View v) {
       Toast.makeText(context, String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
       }
 }

有关getAdapterPosition()的更多信息,请访问以下link

票数 10
EN

Stack Overflow用户

发布于 2015-11-23 17:23:24

尝尝这个

代码语言:javascript
运行
复制
public class ClosetListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    ClosetListAdapter (CallBack callback){
       this.callback = callback
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder baseholder, int position) {
        ViewHolder holder = (ViewHolder) baseholder;
        holder.setPosition(position);
        holder.name.setText(product.getName());
    }

    static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView name = null;

        private OnProductClickListener onProductClickListener;

        public ViewHolder(View itemView, OnProductClickListener onClickListener) {
            super(itemView);

            name = (TextView) itemView.findViewById(R.id.item_name);
            itemView.setOnClickListener(this)

        }

        public void setProdcut(Product product) {
            this.product = product;
        }

        @Override
        public void onClick(View v) {
            if (callback!= null) {
                callback.itemClicked(pos);
            }
        }

        public void setPosition(int position){
            this.pos = position;
        }
    }

    interface CallBack {
       void itemClicked(int position);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-11 04:59:38

我也遇到过同样的问题。

我想找到RecyclerView()中被点击/选中的项的位置,并对该特定项执行一些特定的操作。

对于这类东西,getAdapterPosition()方法很有吸引力。经过一天的长时间研究和无数其他方法的尝试,我找到了这个方法。

代码语言:javascript
运行
复制
int position = getAdapterPosition();
Toast.makeText(this, "Position is: "+position, Toast.LENGTH_SHORT).show();

您不需要使用任何额外的方法。只需创建一个名为'position‘的全局变量,并在适配器的任何主要方法(类或类似方法)中使用getAdapterPosition()对其进行初始化。

以下是此link的简短文档。

在版本22.1.0中添加的

getAdapterPosition int getAdapterPosition ()返回由该ViewHolder表示的项的适配器位置。请注意,如果存在挂起的适配器更新但尚未发生新的布局传递,则此方法可能与getLayoutPosition()不同。在下一次布局遍历之前,RecyclerView不会处理任何适配器更新。这可能会在用户在屏幕上看到的内容和适配器内容之间产生暂时的不一致。这种不一致并不重要,因为它将小于16ms,但如果您希望使用ViewHolder位置来访问适配器,这可能是一个问题。有时,您可能需要获得准确的适配器位置,以执行一些响应用户事件的操作。在这种情况下,您应该使用此方法来计算ViewHolder的适配器位置。

很乐意为您效劳。请随时提出疑问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33867145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档