首页 > 解决方案 > 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));
        }
    }}

"

标签: javaandroidfirebasefirebase-realtime-database

解决方案


作为初学者,基本上有两种方法可以将点击侦听器设置为回收站视图项。

  1. 第一个是简单但非最佳的方法。在您的适配器类的 onBindViewHolder 中为您的 holder.itemview 设置一个 onClickListener
  2. 第二种方法是使用 onClickInterface,然后从调用/主活动中调用它。如果您需要任何进一步的指导,请告诉我

推荐阅读