java - RecyclerView如何在每个项目上设置OnClickListener?
问题描述
我想要这段代码做的是:每当用户点击项目(例如:喜欢或不喜欢)时,我希望我的 firebase 发生一些事情(例如,将 like 的值设置为 1)。我正在努力为每个项目(比如,不喜欢,快乐的表情,报告)设置一个点击监听器。即使我在静态类中设置了点击监听器,我也无法调用我的数据库引用。我也尝试过 CommentsActivity.this.mReviewsDatabase..etc 但它不起作用,因为它不需要静态类。如果我从类中删除静态,应用程序就会崩溃。
public class CommentsActivity extends AppCompatActivity {
private RecyclerView mCommentList;
public DatabaseReference mReviewsDatabase;
private FirebaseUser mCurrentUser;
private ImageView happyEmote, thumpUp, thumbDown ,reportReview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comments);
String title = getIntent().getStringExtra("EXTRA_SESSION_ID");
mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
mReviewsDatabase = FirebaseDatabase.getInstance().getReference().child("Film_reviews").child(title);
mCommentList = (RecyclerView)findViewById(R.id.reviews_list);
mCommentList.setHasFixedSize(true);
mCommentList.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerAdapter<AllCommClass, CommentsActivity.ReviewsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllCommClass, CommentsActivity.ReviewsViewHolder>(
AllCommClass.class,
R.layout.comment_single_layout,
CommentsActivity.ReviewsViewHolder.class,
mReviewsDatabase
) {
@Override
protected void populateViewHolder(CommentsActivity.ReviewsViewHolder reviewsViewHolder, AllCommClass allCommClass, int i) {
reviewsViewHolder.setUsername(allCommClass.getUsername());
reviewsViewHolder.setReview(allCommClass.getReview());
reviewsViewHolder.setVoto(allCommClass.getVoto());
reviewsViewHolder.setReport();
reviewsViewHolder.setLike();
reviewsViewHolder.setDislike();
reviewsViewHolder.setHappyEmote();
reviewsViewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { }
});
}
};
mCommentList.setAdapter(firebaseRecyclerAdapter);
}
public static class ReviewsViewHolder extends RecyclerView.ViewHolder {
View mView;
public ReviewsViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
public void setReport() {
ImageView reportReview = mView.findViewById(R.id.reportReview);
reportReview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Tag","You've reported the comment number "+getAdapterPosition());
}
});
}
public void setLike() {
ImageView thumpUp = mView.findViewById(R.id.thumbUp);
thumpUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Tag","You've liked the comment number "+getAdapterPosition());
}
});
}
public void setDislike() {
ImageView thumpDown = mView.findViewById(R.id.thumbDown);
thumpDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Tag","You've disliked the comment number "+getAdapterPosition());
}
});
}
public void setHappyEmote() {
ImageView happyEmote = mView.findViewById(R.id.happyEmote);
happyEmote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Tag","You've added a reaction to the comment number "+getAdapterPosition());
}
});
}
public void setUsername(String username){
TextView titleView = mView.findViewById(R.id.user_single_username_comment_section);
titleView.setText(username);
}
public void setReview(String review){
TextView titleView = mView.findViewById(R.id.user_single_review);
titleView.setText(review);
}
public void setVoto(int voto){
TextView titleView = mView.findViewById(R.id.user_single_rating);
titleView.setText(String.valueOf(voto));
}
}}
"
解决方案
作为初学者,基本上有两种方法可以将点击侦听器设置为回收站视图项。
- 第一个是简单但非最佳的方法。在您的适配器类的 onBindViewHolder 中为您的 holder.itemview 设置一个 onClickListener
- 第二种方法是使用 onClickInterface,然后从调用/主活动中调用它。如果您需要任何进一步的指导,请告诉我
推荐阅读
- javascript - 为什么浏览器关闭后本地存储被清除?
- java - 底部工作表展开时使用动画最小化底部导航栏
- python - Discord 机器人制作 Photoshop
- node.js - Node.js 获取对象键值输出
- android - Libjingle Android VideoCall 断开连接但连续看到日志
- c# - wkhtmltopdf - 将 html 转换为 pdf 对于大图像文件很慢
- react-native - React Native 不同的底部选项卡导航选项
- html - 减少 Blazor 中 HTML 表格行的单元格/行高
- winforms - 无法将行添加到绑定到 SortableBindngList 的 winforms datagridview
- node.js - 获取时 gatsbyjs 和 expressjs 错误 400 错误请求