代码之家  ›  专栏  ›  技术社区  ›  Tal C

如何将字符串输入ViewHolder

  •  0
  • Tal C  · 技术社区  · 7 年前

    我想将另一个类中的字符串放入以下代码中:

     public class FirebaseCommentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            private View mView;
            private Context mContext;
            private String mphotoUserID;
            private String mUrl;
    
    
            public FirebaseCommentViewHolder(View itemView) {
                super(itemView);
                mView = itemView;
                mContext = itemView.getContext();
    
                itemView.setOnClickListener(this);
            }
    
            public void bindComment(final Comment comment) {
                TextView usernameTextView = (TextView) mView.findViewById(R.id.comment_username);
                TextView comment_textview = (TextView) mView.findViewById(R.id.comment_textview);
                ImageButton moreOptionsImageButton = (ImageButton) mView.findViewById(R.id.comment_more_options);
    
    
                mphotoUserID = comment.getCommenter();
                mUrl = PhotoUtilities.removeWebPFromUrl(comment.getPhoto_url());
    
                //usernameTextView.setText(comment.getCommenter());
                setCommentorsName(comment.getCommenter(), usernameTextView);
                comment_textview.setText(comment.getCommentString());
    }
    
            public void setCommentorsName(String uid, final TextView usernameTextView) {
                FirebaseDatabase.getInstance().getReference(FirebaseConstants.USERDATA).child(uid).child(FirebaseConstants.USERNAME)
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if (dataSnapshot.getValue() != null) {
                                    usernameTextView.setText(dataSnapshot.getValue().toString());
    
                                }
                            }
    
                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                                usernameTextView.setText("BOB");
                            }
                        });
            }
    
            @Override
            public void onClick(View view) {
                final ArrayList<Comment> comments = new ArrayList<>();
        //      Reference correct section of database below
                Toast.makeText(mContext, "Item Clicked", Toast.LENGTH_SHORT).show();
                DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(FirebaseConstants.PHOTOS)
                        .child(mUrl).child(FirebaseConstants.COMMENTS);
                ref.addListenerForSingleValueEvent(new ValueEventListener() {
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                            comments.add(snapshot.getValue(Comment.class));
                        }
    
        //                int itemPosition = getLayoutPosition();
    
        //                Intent intent = new Intent(mContext, RestaurantDetailActivity.class);
        //
        //                mContext.startActivity(intent);
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });
    
            }
    

    以下是我用来启动该类的代码:

    private void setUpFirebaseAdapter() {
        mFirebaseAdapter = new FirebaseRecyclerAdapter<Comment, FirebaseCommentViewHolder>
                (Comment.class, R.layout.comment_template, FirebaseCommentViewHolder.class,
                        mCommentReference) {
    
            @Override
            protected void populateViewHolder(FirebaseCommentViewHolder viewHolder,
                                              Comment model, int position) {
                viewHolder.bindComment(model);
            }
        };
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mRecyclerView.setAdapter(mFirebaseAdapter);
        mRecyclerView.setVisibility(View.VISIBLE);
    }
    

    注意:我确实删除了一些不相关的代码,所以如果括号不匹配,或者是什么原因。

    1 回复  |  直到 7 年前
        1
  •  1
  •   OneCricketeer Gabriele Mariotti    7 年前

    基本上,我需要将代码中的用户ID传递到FirebaseCommentViewHolder类中

    我只需要添加一个参数

        @Override
        protected void populateViewHolder(FirebaseCommentViewHolder viewHolder,
                 Comment model, int position) {
            // Grab your userId from somewhere
            viewHolder.bindComment(model, userId);
        }
    

    您不能添加到ViewHolder的构造函数中,因为FirebaseUI正在从代码中抽象出它。

    您也可以扩展FirebaseRecyclerAdapter并将其添加到 建造师

    private void setUpFirebaseAdapter(final String userId) {
        // For example
        mFirebaseAdapter = new UserIdFirebaseRecyclerAdapter<Comment, FirebaseCommentViewHolder>
                (userId, Comment.class, R.layout.comment_template, FirebaseCommentViewHolder.class,
                        mCommentReference) {
    

    无论哪种方式,您都可以通过 bindComment()

    推荐文章