I have a recycler view inside my full screen alert dialog, but for some reason it doesn't display any of the items inside the ArrayList passed to the adapter.
I tried:
- Initializing the adapter after adding the items inside the ArrayList
- Use notifyItemInserted instead of using notifyDataSetChanged
- Checking if there is a problem with the item layout
My method that creates the full screen dialog:
private void showCommentsDialog() {
AlertDialog dialog = new AlertDialog.Builder(context, R.style.Theme_SocialMeme).create();
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = layoutInflater.inflate(R.layout.comments_dialog_fragment, null);
ImageButton dismissDialogButton = dialogView.findViewById(R.id.imageButton17);
EditText comment = dialogView.findViewById(R.id.writeCommentET);
ImageButton addCommentBtn = dialogView.findViewById(R.id.imageButton18);
RecyclerView commentsRecyclerView = dialogView.findViewById(R.id.comments_recycler_view);
ArrayList<CommentModel> commentModelArrayList = new ArrayList<>();
CommentsRecyclerAdapter adapter = new CommentsRecyclerAdapter(commentModelArrayList, context, dialog.getOwnerActivity());
commentsRecyclerView.setAdapter(adapter);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.child("posts").child(postID).hasChild("comments")) {
for (DataSnapshot commentsSnapshot : snapshot.child("posts").child(postID).child("comments").getChildren()) {
CommentModel commentModel = new CommentModel();
commentModel.setAuthor(commentsSnapshot.child("author").getValue(String.class));
commentModel.setCommentID(commentsSnapshot.child("commentID").getValue(String.class));
commentModel.setAuthorUsername(commentsSnapshot.child("authorUsername").getValue(String.class));
commentModel.setPostID(commentsSnapshot.child("postID").getValue(String.class));
commentModel.setAuthorProfilePictureURL(commentsSnapshot.child("authorProfilePictureURL").getValue(String.class));
commentModel.setCommentText(commentsSnapshot.child("commentText").getValue(String.class));
commentModelArrayList.add(commentModel);
adapter.notifyItemInserted(commentModelArrayList.size() -1);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(context, "Error: " error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
dismissDialogButton.setOnClickListener(view -> dialog.dismiss());
dialog.setView(dialogView);
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
dialog.show();
}
My Adapter:
public class CommentsRecyclerAdapter extends RecyclerView.Adapter {
List<CommentModel> commentsList;
Context context;
Activity activity;
public CommentsRecyclerAdapter(List<CommentModel> commentsList, Context context, Activity activity) {
this.commentsList = commentsList;
this.context = context;
this.activity = activity;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_item, parent, false);
return new CommentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
CommentViewHolder viewHolder = (CommentViewHolder) holder;
// Load profile picture
String profilePictureUrl = commentsList.get(position).getAuthorProfilePictureURL();
if (profilePictureUrl != null) {
if (!profilePictureUrl.equals("none")) {
Glide.with(context).load(profilePictureUrl).into(viewHolder.profilePicture);
}
}
viewHolder.usernameTV.setText(commentsList.get(position).getAuthorUsername());
viewHolder.commentContent.setText(commentsList.get(position).getCommentText());
}
@Override
public int getItemCount() {
return commentsList.size();
}
}
My Dialog view:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/background"
tools:context=".Activities.NotificationsActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@ id/constraintLayout4"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@ id/toolbar4"
android:layout_width="0dp"
android:layout_height="70dp"
android:background="@color/white"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/textView24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-black"
android:text="Comments"
android:textColor="@color/black"
android:textSize="40sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@ id/toolbar4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.081"
app:layout_constraintStart_toStartOf="@ id/toolbar4"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.411" />
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/comments_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@ id/view19"
tools:itemCount="10"
tools:listitem="@layout/comment_item" />
<androidx.cardview.widget.CardView
android:id="@ id/view19"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginBottom="12dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
app:cardCornerRadius="12dp"
app:cardElevation="8dp"
app:layout_constraintBottom_toTopOf="@ id/comments_recycler_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@ id/toolbar4">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@ id/comments_profile_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/user"
app:civ_border_color="#FF000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.045"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@ id/writeCommentET"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ems="10"
android:hint="Write a comment"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="@ id/comments_profile_image"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@ id/comments_profile_image"
app:layout_constraintTop_toTopOf="@ id/comments_profile_image" />
<ImageButton
android:id="@ id/imageButton18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="@ id/writeCommentET"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@ id/writeCommentET"
app:layout_constraintTop_toTopOf="@ id/writeCommentET"
app:srcCompat="@drawable/ic_arrow_forward" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<ImageButton
android:id="@ id/imageButton17"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="8dp"
android:background="@color/white"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintBottom_toBottomOf="@ id/toolbar4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@ id/toolbar4"
app:srcCompat="@drawable/ic_close_black" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
My item view layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:cardElevation="8dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_marginTop="15dp"
app:cardCornerRadius="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#6FFFFFFF"
android:padding="15dp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@ id/circleImageView3"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/user"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/textView65"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Username"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="?attr/textFillColor"
app:layout_constraintBottom_toBottomOf="@ id/circleImageView3"
app:layout_constraintStart_toEndOf="@ id/circleImageView3"
app:layout_constraintTop_toTopOf="@ id/circleImageView3" />
<TextView
android:id="@ id/textView69"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Comment text"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="?attr/titleTextColor"
app:layout_constraintStart_toStartOf="@ id/circleImageView3"
app:layout_constraintTop_toBottomOf="@ id/circleImageView3" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
CodePudding user response:
You have forgot to add LayoutManager to Recyclerview. If you are listing it vertically you can add layout manager as the following:
In View:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"
In Code:
commentsRecyclerView.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false));