I'm using FirebaseRecycleAdapter to populate comments system:
CommentViewHolder.class:
public class CommentViewHolder extends RecyclerView.ViewHolder {
TextView displayNameView;
TextView bodyView;
String uid;
CommentViewHolder(View itemView) {
super(itemView);
displayNameView = (TextView) itemView.findViewById(R.id.comment_displayName);
bodyView = (TextView) itemView.findViewById(R.id.comment_body);
}
public void setDisplayName(String displayName) {
displayNameView.setText(displayName);
}
public void setBody(String body) {
bodyView.setText(body);
}
public void setUid(String uid) {
this.uid = uid;
}
}
And in my activity:
mCommentsRecycler = (RecyclerView) findViewById(R.id.recycler_comments);
mCommentsRecycler.setHasFixedSize(false);
mCommentsRecycler.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseRecyclerAdapter<Comment, CommentViewHolder>(Comment.class, R.layout.comment_item, CommentViewHolder.class, CommentsReference) {
@Override
protected void populateViewHolder(CommentViewHolder viewHolder, final Comment model, int position) {
viewHolder.setDisplayName(model.getDisplayName());
viewHolder.setBody(model.getBody());
viewHolder.setUid(model.getUid());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showCommentClickedList(model);
}
});
}
};
mCommentsRecycler.setAdapter(mAdapter);
I tried to put the ViewHolder inside the activity with "public static" like I saw in some answers, but same error,
And the most wired part - WHEN I RUN IT FROM ANDROID STUDIO, It works perfect, once I create debug apk or release apk the problem start to come
The error:
04-10 15:13:16.137 22024-22024/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: PID: 22024
java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [class android.view.View]
at com.firebase.ui.database.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:171)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6319)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5507)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5392)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5388)
FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:171)
is Constructor<VH> constructor = mViewHolderClass.getConstructor(View.class);
If your ViewHolder
is declared inside your FirebaseRecyclerAdapter
, then it should be public
and static
.
In both cases, declaring inside FirebaseRecyclerAdapter
or on its own class, the constructor must be public
.