我正在使用Firebase UI FirebaseRecyclerAdapter填充RecyclerView。我设法从我的项目视图的组件(标题)获得点击事件,但不能在项目视图中的任何位置使用,这正是我需要的。我跟着谷歌样本。Firebase UI RecyclerView onClick
在我的活动:
private void setRecyclerView() {
recyclerView = (RecyclerView) findViewById(R.id.recycler_view_gigs);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseRecyclerAdapter<Gig, GigViewHolder>(Gig.class,
R.layout.list_item_card,
GigViewHolder.class,
reference) {
@Override
protected void populateViewHolder(final GigViewHolder viewGig, Gig model, final int position) {
viewGig.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(Utils.TAG, "onItemClickGeneral: position " + position);
// this doesn't work
}
});
viewGig.bindToGig(model, new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(Utils.TAG, "onItemClickTitle: position " + position);
// this works
}
});
}
};
recyclerView.setAdapter(mAdapter);
}
和我ViewHolderClass:
public class GigViewHolder extends RecyclerView.ViewHolder {
ImageView ivIconArtist;
TextView tvArtist;
TextView tvVenue;
TextView tvDate;
public GigViewHolder(View view) {
super(view);
ivIconArtist = (ImageView) view.findViewById(R.id.iv_list_item_icon_artist);
tvArtist = (TextView) view.findViewById(R.id.tv_list_item_artist);
tvVenue = (TextView) view.findViewById(R.id.tv_list_item_venue);
tvDate = (TextView) view.findViewById(R.id.tv_list_item_date);
}
public void bindToGig(Gig gig, View.OnClickListener clickListener) {
tvArtist.setText(gig.getArtist());
tvVenue.setText(gig.getVenue());
tvDate.setText(gig.getDate());
tvArtist.setOnClickListener(clickListener);
}
}
我想自定义onclicklistener +接口在其他的答案提示,没有运气无论是。
尝试在GigViewHolder构造函数中设置您的点击侦听器,如视图。setOnClickListener(clickListener);由于您已经为艺术家标题设置了监听者,因此我认为您只会在该文本视图点击时获得回调。 –
试过之前,这让GIGViewHolder实现了View.OnClickListener,添加了一个不起作用的onClick方法。 –
我认为不需要在ViewHolderClass上实现onClickListener,就像在bindToGig中设置类级别的clickListener一样。然后设置相同的clickListener来查看哪些是您的构造函数引用。 –