【发布时间】:2023-03-23 01:36:01
【问题描述】:
我想将来自不同类的字符串放入以下代码:
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);
}
基本上,我需要将代码中的用户 ID 传递到 FirebaseCommentViewHolder 类中,但我不确定是如何实现的,因为我以前从未实现过这样的代码。我试图将它添加到构造函数中,但这不起作用/得到 Android Studio 的认可。任何其他提示将不胜感激!
注意:我确实删除了一些不相关的代码,所以如果括号不匹配或其他原因。
【问题讨论】:
-
什么不同的类?放在哪里?
-
只要输入你注释掉的
usernameTextView.setText的id -
usernameTextView.setText(dataSnapshot.getValue().toString()) 的值是多少?是来自 Firebase 的 JSON 吗?
-
我已经有了。我想获取当前用户。这样我可以检查当前用户是否是留下评论的人,以便当前用户可以选择删除或编辑评论。其他用户将没有该选项。
-
没关系,我知道这对 viewholder 来说是个问题,因为它确实为每个视图创建了一个新的 viewholder。所以,我不妨把它放到bindComment()中。谢谢!
标签: android firebase firebase-realtime-database android-recyclerview firebaseui