2015-07-02 103 views
1

我想要做的是设置一个onClickListener的一个ImageView在一个回收视图中的项目。我只想在该ImageView上单击来执行代码A并单击其他任何地方以运行代码B.我该怎么做?我正在使用:Android OnClickListener for RecyclerView的孩子的孩子

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> { 

    LayoutInflater inflater; 
    Context context; 

    ClickListener clickListener; 

    List<PostContent> posts = Collections.emptyList(); 

    public RecyclerAdapter(Context context) { 
     this.context = context; 
     inflater = LayoutInflater.from(context); 
    } 

    public void setPosts(List<PostContent> posts) { 
     this.posts = posts; 
    } 

    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = inflater.inflate(R.layout.post_row, viewGroup, false); 
     RecyclerViewHolder viewHolder = new RecyclerViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) { 
     viewHolder.name.setText(posts.get(i).name); 
     viewHolder.username.setText("@" + posts.get(i).username); 
     viewHolder.time_post.setText(posts.get(i).time_post); 
     viewHolder.content.setText(posts.get(i).content); 
    } 

    @Override 
    public int getItemCount() { 
     return posts.size(); 
    } 

    public void setClickListener(ClickListener clickListener) { 
     this.clickListener = clickListener; 
    } 

    public interface ClickListener { 
     public void ItemClicked(View view, int pos); 
    } 

    public class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     TextView name; 
     TextView username; 
     TextView time_post; 
     TextView content; 
     ImageView profile; 

     public RecyclerViewHolder(View itemView) { 
      super(itemView); 
      name = (TextView) itemView.findViewById(R.id.name); 
      username = (TextView) itemView.findViewById(R.id.username); 
      time_post = (TextView) itemView.findViewById(R.id.time); 
      content = (TextView) itemView.findViewById(R.id.content); 
      profile = (ImageView) itemView.findViewById(R.id.profile); 

      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (clickListener != null) { 
       clickListener.ItemClicked(v, getPosition()); 
      } 
     } 

    } 

} 

适用于我的适配器和视图持有者。

+0

也发布您的适配器。 –

回答

2

好吧,这可能不是正确的做法,但这是我得到它的工作方式。

在ViewHolder首先创建一个点击式界面:

private TaskListRecyclerviewClickInterface clickListener; 

...

this.clickListener = clickListener; 

...

public interface TaskListRecyclerviewClickInterface { 
    public void onItemClicked(int position, String tag); 
} 

然后一个onclicklistener添加到您想要的意见和当这些项目被点击时调用这个接口,如下所示:

holder_view.setTag("holder"); 
holder_view.setOnClickListener(this); 
imageView.setTag("ImageView"); 
imageView.setOnclickListener(this); 

而且onClickListener:

@Override 
public void onClick(View v) { 
    if (clickListener != null) { 
     clickListener.onItemClicked(getPosition(), v.getTag().toString()); 
    } 
} 
从活动

现在,通过这个接口适配器在构造函数中,然后将接口传递给此viewholder像这样:

public InboxTaskListAdapter(List<Items> items, InboxTasksViewHolder.TaskListRecyclerviewClickInterface clickListener) { 
     this.items = items; 
     this.clickListener = clickListener; 
    } 

在onCreateViewHolder你应该将接口传递给视图。

现在在您的活动或片段中,只需实现此侦听器并覆盖onItemClicked方法。您现在将看到被点击的视图位置和标签。

+0

非常感谢!它像一个魅力。我有几乎相同的东西,但我设置为持有人或imageview clickListener,从来没有在同一时间。得到它的工作。非常感谢。 – sirvar

+0

Coolbeans男人。很高兴我能帮上忙 – Smashing