2015-07-02 3 views
1

Что я хочу сделать, это установить onClickListener для ImageView, который находится в элементе в recyclerview. Я хочу только щелкнуть на этом ImageView, чтобы сделать CODE A, и щелкнуть в другом месте, чтобы запустить CODE B. Как я могу это сделать? Я использую:Android OnClickListener для ребенка ребенка 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

Большое спасибо! Отлично работает. У меня было почти то же самое, но я устанавливал clickListener для держателя или изображения, но оба одновременно. Получил это, чтобы работать. Большое спасибо. – sirvar

+0

Coolbeans человек. Рад, что смог помочь – Smashing

Смежные вопросы