2015-07-02 152 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