当前位置: 首页 > 知识库问答 >
问题:

如何在每个项目上设置OnClickListener?

邬宏扬
2023-03-14

我是这方面的新手。我希望这个代码做的是:每当用户点击项目(例如:like或dislike)时,我希望我的firebase发生一些事情(例如,将like的值设置为1)。我正在努力为每个项目(喜欢,不喜欢,快乐,报告)设置一个点击监听器,但我不知道怎么做。即使我在静态类内部设置了click侦听器,也不能调用我的数据库引用。我还尝试了commentsactivity.this.mreviewsdatabase.等,但都不起作用,因为它不想要一个静态类。如果我从类中移除静态,应用程序就会崩溃。

你会怎么做?代码应该是什么,以使其工作?

提前谢谢大家,祝大家有个愉快的一天。

'''公共类CommentsActivity扩展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));
    }
}}

共有1个答案

单于善
2023-03-14

作为一个初学者,基本上有两种方法可以将click listener设置为一个回收器视图项。

  1. 第一种是简单但不是最佳的方法。在adapter类的OnBindViewWholder中,为Holder.ItemView
  2. 设置onClickListener
  3. 第二种方法是使用onClickInterface,然后从调用/主activity调用它。如果您需要任何进一步的指导,请告诉我
 类似资料:
  • 问题内容: 有没有在Eclipse的方式来设置或通过项目的情况下的一个项目?通常,这些设置引用当前工作空间的所有项目。我可以得到的距离越近,但这又又指的是构建的顺序。 问题答案: 不,这是设计无法实现的。我引用了关于同一主题的较早讨论: “我们认为在工作空间的一部分上具有自动构建的模式混淆了自动构建的概念,这目前意味着用户不需要了解构建。我们的想法是,使用新的工作集构建,您可以为其添加密钥绑定(或

  • 问题内容: 我在詹金斯(Jenkins)有大约10个项目,每个项目针对10个不同的客户。因此,我需要为所有项目创建凭据,以便每个客户端只能访问其项目。 有任何插件可以满足我的要求吗? 请帮忙 !!! 问题答案: 在“全局安全性”下选择“基于项目的矩阵授权策略” 定义普通用户,但不能访问此级别的项目。 然后在每个项目上选择“启用基于项目的安全性”,在这里您可以为单个用户授予其他权限,例如查看和执行作

  • 我正在使用代号为One的Eclipse插件。 现在我开始第二个项目。 我想设置一个或多个“片段”项目,以避免项目之间的代码重复。例如,如果我有一个用于字符串连接的实用程序类,我希望在一个实用程序片段项目中使用它,然后由我的项目引用。 使用Codename One的推荐方法是什么?

  • 问题内容: Sherlog是基于OSGi的日志分析器,如果我将此项目作为工作区快照导入,则我的工作区中会收到很多项目,但是我希望将它们作为项目中的子项目。 另一个选择是从svn签出,但是然后我遇到了其他问题(我不知道如何设置依赖项以进行自动构建) 是否有人对此主题有想法或好的链接?谢谢 问题答案: Eclipse不支持子项目。Eclipse的生活方式是工作空间中的一个或多个项目(也许使用工作集来避

  • 我刚刚安装了IntelliJ IDEA,当我尝试创建第一个项目时,它要求我设置项目SDK。当我单击“JDK”时,它要求我选择JDK的主目录,如图所示。 我找不到它在哪里。