'Whenever I add new Data to FireStore DataBase and display it to recyclerView , it only shows the newly added data. Here is my Code :

The recycler view only shows the recent add i.e the single element which is newly added, and the rest of the activity is blank, Also whenever I switch fragments and visit again the main fragment it shows all data?

Place to display data and set Adapter:

public class HomeFragment extends Fragment {

    private RecyclerView recyclerView;
    private List<BlogPost> blogList;
    private FirebaseFirestore firestore;
    private FirebaseDatabase database;
    private DatabaseReference reference;
    private BlogPostAdapter adapter;
    public HomeFragment() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_home, container, false);

        blogList = new ArrayList<>();

        firestore = FirebaseFirestore.getInstance();

        recyclerView = (RecyclerView)view.findViewById(R.id.post_list_view);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
        EventChangeListener();
        adapter = new BlogPostAdapter(blogList);
        recyclerView.setAdapter(adapter);
        return view;
    }

    public void EventChangeListener() {

        Query firstQuery = firestore.collection("Posts").orderBy("TimeStamp",Query.Direction.ASCENDING);
        firstQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @SuppressLint("NotifyDataSetChanged")
            @Override
            public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
                if(error!=null)
                {
                    Log.e("Firestore Error",error.getMessage());
                    return;
                }
                blogList.clear();
                for(DocumentChange doc : value.getDocumentChanges())
                {
                    if(doc.getType()== DocumentChange.Type.ADDED)
                    {
                        String blogPostId = doc.getDocument().getId();
                        QueryDocumentSnapshot post = doc.getDocument();
                        BlogPost blogPost = new BlogPost();
                        Map<String, Object> s = post.getData();
                        int[] likeCnt = {0};
                        blogPost.setPost_txt((String) s.get("Post_Content"));
                        DocumentSnapshot.ServerTimestampBehavior behavior = ESTIMATE;
                        blogPost.setTimestamp(post.getDate("TimeStamp", behavior));
                        blogPost.setUser_id((String) s.get("User"));
                        blogList.add(0,blogPost.withId(blogPostId));
                    }
                }
                adapter.notifyDataSetChanged();
            }

        });
    }

**/*Adapter Code*/**

public class BlogPostAdapter extends RecyclerView.Adapter<BlogPostAdapter.ViewHolder> {

    private List<BlogPost> blog_lists;
    private FirebaseFirestore firestore;
    private FirebaseAuth mAuth;
    private Context context;

    public BlogPostAdapter(List<BlogPost> lc)
    {
        this.blog_lists = lc;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        mAuth = FirebaseAuth.getInstance();
        firestore = FirebaseFirestore.getInstance();
        context   = parent.getContext();
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_post_view,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {

        String blogPostId = blog_lists.get(position).blogPostId;
        String sc = blog_lists.get(position).getPost_txt();
        holder.postContent.setText(sc);
        String currentUserId = mAuth.getCurrentUser().getUid();
        long millisecond = blog_lists.get(position).getTimestamp().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d,yyyy");
        String dateString = simpleDateFormat.format(millisecond);
        holder.date.setText(dateString);

        firestore.collection("Posts/"+blogPostId+"/Likes").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
                if(!value.isEmpty())
                {
                    int count = value.size();
                    holder.updateLikes(count);
                }
                else {
                    holder.updateLikes(0);
                }
            }
        });

                
                firestore.collection("Posts/" + blogPostId + "/Likes").document(currentUserId).addSnapshotListener(new EventListener<DocumentSnapshot>() {
                    @SuppressLint("UseCompatLoadingForDrawables")
                    @Override
                    public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {

                        if (value.exists()) {
                            holder.likeBtn.setImageDrawable(context.getDrawable(R.drawable.action_liked));
                        } else {
                            holder.likeBtn.setImageDrawable(context.getDrawable(R.drawable.action_likebutton));
                        }
                    }
                });
        holder.likeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                firestore.collection("Posts/"+blogPostId+"/Likes").document(currentUserId).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                        if(!task.getResult().exists()){
                            Map<String,Object> mp = new HashMap<>();
                            mp.put("TimeStamp", FieldValue.serverTimestamp());
                            firestore.collection("Posts/"+blogPostId+"/Likes").document(currentUserId).set(mp);
                        }
                        else
                        {
                            firestore.collection("Posts/"+blogPostId+"/Likes")
                                    .document(currentUserId).delete();
                        }
                    }
                });

            }
        });

    }

    @Override
    public int getItemCount() {
        return blog_lists.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        private TextView postContent,date,likeCnt;
        private ImageView likeBtn;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            postContent = (TextView) itemView.findViewById(R.id.post_content);
            date        = (TextView) itemView.findViewById(R.id.date);
            likeBtn     = (ImageView) itemView.findViewById(R.id.like_btn);
            likeCnt     = (TextView) itemView.findViewById(R.id.likes_cnt);
        }
        public void updateLikes(int count)
        {
            likeCnt.setText(count+" Likes");
        }
    }


}

**// Model Class //***

public class BlogPost extends BlogPostId {

    public String user_id,post_txt;
    public Date TimeStamp;
    int like_count;
    public BlogPost(String post_txt)
    {
        this.post_txt = post_txt;
    }
    public BlogPost()
    {

    }

    public BlogPost(String user_id, String post_txt,Date timestamp) {
        this.user_id = user_id;
        this.post_txt = post_txt;
        this.TimeStamp = timestamp;
    }

    public BlogPost(String user_id, String post_txt, Date timeStamp, int like_count) {
        this.user_id = user_id;
        this.post_txt = post_txt;
        TimeStamp = timeStamp;
        this.like_count = like_count;
    }


    public void setLike_count(int like_count) {
        this.like_count = like_count;
    }

    public String getUser_id() {

        return user_id;
    }

    public void setUser_id(String user_id)
    {
        this.user_id = user_id;
    }

    public String getPost_txt() {

        return post_txt;
    }

    public void setPost_txt(String post_txt) {
        this.post_txt = post_txt;
    }

    public Date getTimestamp() {
        return TimeStamp;
    }

    public void setTimestamp(Date timestamp) {
        this.TimeStamp = timestamp;
    }

    public int getLike_count() {
        return like_count;
    }

}

**// Main Activity //**


public class MainActivity extends AppCompatActivity {

    private androidx.appcompat.widget.Toolbar mainToolbar;
    private ImageView addPost_btn;

    private BottomNavigationView main_bottom_nav_view;
    private FirebaseAuth mAuth;
    private HomeFragment homeFragment;
    private NotificationFragment notificationFragment;
    private AccountFragment accountFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(isNetworkAvailable())
        {
            Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
        }
        else{
            Toast.makeText(this, "Connection Unavailable", Toast.LENGTH_SHORT).show();

        }
        mAuth = FirebaseAuth.getInstance();
        //Bottom navigation bar
        main_bottom_nav_view = findViewById(R.id.mainBottomNav);
        //Fragment
        homeFragment  = new HomeFragment();
        notificationFragment = new NotificationFragment();
        accountFragment = new AccountFragment();
        //Post Button
        addPost_btn = (ImageView) findViewById(R.id.addPostBtn);
        replaceFragment(homeFragment);
        addPost_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent post_Intent = new Intent(MainActivity.this,NewPostActivity.class);
                startActivity(post_Intent);
            }
        });
        main_bottom_nav_view.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch(item.getItemId())
                {
                    case R.id.bottom_home:
                        replaceFragment(homeFragment);
                        return true;
                    case R.id.bottom_post:
                        replaceFragment(notificationFragment);
                        return true;
                    case R.id.bottom_acc:
                        replaceFragment(accountFragment);
                        return true;
                    default:
                        return false;
                }
            }
        });
    }


    @Override
    protected void onStart() {
        super.onStart();
        FirebaseUser currUser = FirebaseAuth.getInstance().getCurrentUser();
        if(currUser==null)
        {
            sendToLogin();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu,menu);
        return true;
    }
    private void sendToLogin() {

        Intent login_Intent = new Intent(MainActivity.this,Login_Activity.class);
        startActivity(login_Intent);
        finish();
    }

    private void replaceFragment(Fragment newFragment)
    {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.main_container,newFragment);
        fragmentTransaction.commit();
    }
    private boolean isNetworkAvailable() {
        try{
            ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = null;

            if(manager!=null)
            {
                networkInfo = manager.getActiveNetworkInfo();
            }
            return networkInfo!=null && networkInfo.isConnected();
        }
        catch (NullPointerException e)
        {
            return false;
        }
    }
}


**// Adding New Data to Firebase FireStore**

public class NewPostActivity extends AppCompatActivity {

    private EditText post_txt;
    private ImageView post_btn;
    private ProgressBar new_post_progress;
    private StorageReference storageReference;
    private FirebaseFirestore firestore;
    private FirebaseAuth firebaseAuth;
    private String currUser;
    private Uri post_txtUri=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_post);
        post_txt = (EditText) findViewById(R.id.post_txt);
        post_btn = (ImageView) findViewById(R.id.post_btn);
        firebaseAuth = FirebaseAuth.getInstance();
        currUser = firebaseAuth.getCurrentUser().getEmail();
        new_post_progress = (ProgressBar) findViewById(R.id.new_post_progress);
        storageReference = FirebaseStorage.getInstance().getReference().child("Post_Contents");
        firestore        = FirebaseFirestore.getInstance();


        post_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = post_txt.getText().toString();

                if(!TextUtils.isEmpty(text))
                {
                    new_post_progress.setVisibility(View.VISIBLE);
                    String randomName = FieldValue.serverTimestamp().toString();

                            Map<String,Object> postMap = new HashMap<>();
                            postMap.put("Post_Content",text);
                            postMap.put("User",currUser);
                            postMap.put("TimeStamp",FieldValue.serverTimestamp());

                            firestore.collection("Posts").add(postMap).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {

                                @Override
                                public void onComplete(@NonNull Task<DocumentReference> task) {
                                    new_post_progress.setVisibility(View.INVISIBLE);
                                    if(task.isSuccessful())
                                    {
                                        Toast.makeText(NewPostActivity.this,"Posted Successfully",Toast.LENGTH_SHORT).show();
                                        Intent mainPage = new Intent(NewPostActivity.this,MainActivity.class);
                                        startActivity(mainPage);
                                        finish();
                                    }
                                    else
                                    {
                                        Toast.makeText(NewPostActivity.this,"Error Occurred",Toast.LENGTH_SHORT).show();
                                    }

                                }
                            });
                        }
                else
                {
                      Toast.makeText(NewPostActivity.this,"Error in posting",Toast.LENGTH_SHORT).show();
                }
//                firestore.collection("Posts").document().update("TimeStamp",FieldValue.serverTimestamp());
            }
        });
    }

}

I use a NewPostActivity to post the data in firebase Firestore by creating a collections and retrieving the data in recycler view format as usual, but whenever I retrieve data from firebase and add it to arraylist and display in recyclerView it only shows the newly added element at first and then when I switch to another fragment and come back to homeFragment it shows all the post neatly. I tried finding solutions on youtube but couldn't find any.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source