Firebase UI FirebaseRecyclerAdapterを使用して、RecyclerViewを生成しています。アイテムビュー(タイトル)のコンポーネントからクリックイベントを取得することはできましたが、アイテムビューのどの場所でも必要なイベントは表示されませんでした。私はGoogleのサンプルに従った。私の活動に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 +インタフェース、運を試してみました。
click listenerをviewのようなGigViewHolderコンストラクタに設定してみてください。setOnClickListener(clickListener);あなたが唯一のアーティストのタイトルのリスナーを設定しているので、私はあなたがそのtextviewのクリックでコールバックを得るだろうと思う。 –
前に試したことは、GigViewHolderにView.OnClickListenerを実装させ、どちらも動作しないonClickメソッドを追加することです。 –
私はbindHelderClassでonClickListenerを実装する必要はないと思うbindToGigでクラスレベルのclickListenerを右に設定しています。同じclickListenerを設定して、どちらがコンストラクタ参照であるかを確認します。 –