首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RecyclerView :获取位置并切换到activity

RecyclerView :获取位置并切换到activity
EN

Stack Overflow用户
提问于 2015-01-11 19:55:17
回答 3查看 40.4K关注 0票数 17

如何获取在RecyclerView行中被单击的项的位置,然后在onClick方法中创建一个活动的意图?这是我的适配器:

代码语言:javascript
复制
public class SergejAdapter extends RecyclerView.Adapter<SergejAdapter.MyViewHolder>{

    private LayoutInflater inflater;
    List<Information> data= Collections.emptyList();

    public SergejAdapter(Context context, List<Information> data){
      inflater = LayoutInflater.from(context);
        this.data=data;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.navigation_drawer_custom_row,parent,false);
        MyViewHolder holder= new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Information current=data.get(position);
        holder.title.setText(current.title);
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView title;
        ImageView icon;

        public MyViewHolder(View itemView){
            super(itemView);
            title= (TextView) itemView.findViewById(R.id.listText);
            icon = (ImageView) itemView.findViewById(R.id.listIcon);
            icon.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            Context context = itemView.getContext();
            Intent intent = new Intent(context, Ernaehrung.class);
            context.startActivity(intent);

        }
    }

在这里,当其中一个图像被单击时,我只有一个onClick,但每个图像都有相同的意图。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-11 19:59:33

您可以使用getAdapterPosition()方法从ViewHolder获取位置。如以下代码所示:

代码语言:javascript
复制
public class SergejAdapter extends RecyclerView.Adapter<SergejAdapter.MyViewHolder>{

    ...

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{


        @Override
        public void onClick(View v) {
            // here you use position
            int position = getAdapterPosition();
            ...

        }
    }
}
票数 60
EN

Stack Overflow用户

发布于 2015-01-11 20:02:52

在您的onClick(View v)中,您可以简单地调用getLayoutPosition(),它将返回单击发生的位置。有关详细信息,请查看official docs

所以你的代码应该是这样的:

代码语言:javascript
复制
@Override
public void onClick(View v) {
    switch(getLayoutPosition()){
       //TODO
    }
}

你最好使用一个接口来处理点击。

票数 1
EN

Stack Overflow用户

发布于 2015-10-16 17:38:37

或者,您可以添加以下内容:

代码语言:javascript
复制
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder > {

...
    class MyViewHolder extends RecyclerView.ViewHolder {

        public MyViewHolder (View itemView) {
            super(itemView);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "Element " + getAdapterPosition() + " clicked.");
                }
            });
        }


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

https://stackoverflow.com/questions/27886737

复制
相关文章

相似问题

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