1

Hi all I have have used a RecyclerView Adapter for Fetching the data from Firestore. Now i want that after fetching 10 records initially , if user slides down to last record, it should fetch next few records like 2 or 3 from FIrestore Database as i move down further. I dont know how to set that property and also where to set that property. ViewHolder class and ViewAdapter class are Written below . Initially i am fetching whole data Under the given Collection. Any suggestion is welcome.

    package com.example.merchant;

    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;

    import java.util.ArrayList;

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {

        public RecyclerViewAdapter(FetchPastOrders fetchPastOrders, ArrayList<PastOrders> pastOrders) {
            this.fetchPastOrders = fetchPastOrders;
            this.pastOrders = pastOrders;
        }



        public FetchPastOrders getFetchPastOrders() {
            return fetchPastOrders;
        }

        public void setFetchPastOrders(FetchPastOrders fetchPastOrders) {
            this.fetchPastOrders = fetchPastOrders;
        }

        public ArrayList<PastOrders> getPastOrders() {
            return pastOrders;
        }

        public void setPastOrders(ArrayList<PastOrders> pastOrders) {
            this.pastOrders = pastOrders;
        }

        FetchPastOrders fetchPastOrders;
       ArrayList<PastOrders> pastOrders;

        @NonNull
        @Override
        public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater=LayoutInflater.from(fetchPastOrders.getBaseContext());
            View view=layoutInflater.inflate(R.layout.singleorderfetch,parent,false);


            return new RecyclerViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {

            holder.Name.setText("Name : "+pastOrders.get(position).getName());
            holder.Location.setText("Location : "+pastOrders.get(position).getLocation());
            holder.CID.setText("CID : "+pastOrders.get(position).getCID());
            holder.Amount.setText("Amount : "+pastOrders.get(position).getAmount());
            holder.Date.setText("Date : "+pastOrders.get(position).getDate());

        }

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






    package com.example.merchant;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;

    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
    import com.firebase.ui.firestore.FirestoreRecyclerOptions;
    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.OnFailureListener;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.android.gms.tasks.Task;
    import com.google.firebase.firestore.DocumentReference;
    import com.google.firebase.firestore.DocumentSnapshot;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.Query;
    import com.google.firebase.firestore.QueryDocumentSnapshot;
    import com.google.firebase.firestore.QuerySnapshot;

    import java.util.ArrayList;

    public class FetchPastOrders extends AppCompatActivity {

        TextView Name;
        TextView Amount;
        TextView CID;
        TextView Location;
        TextView orderId;
        RecyclerView recyclerView;
        private RecyclerViewAdapter adapter;
        FirebaseFirestore firebaseFirestore;
        ArrayList<PastOrders> pastOrdersList = new ArrayList<>();


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fetch_past_orders);
            Name = findViewById(R.id.Name);
            Amount = findViewById(R.id.Amount);
            CID = findViewById(R.id.CID);
            orderId = findViewById(R.id.orderId);
            Location = findViewById(R.id.location);
            setFireStore();
            setUpRecycleView();
            loadDataFromFirebase();


        }


        private void setFireStore() {
            firebaseFirestore = FirebaseFirestore.getInstance();
        }

        private void setUpRecycleView() {
            recyclerView = findViewById(R.id.recyclerView);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));


        }

        private void loadDataFromFirebase() {

            firebaseFirestore.collection("Orders").orderBy("date", Query.Direction.DESCENDING)
                    .get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            for (DocumentSnapshot querySnapshots : task.getResult()) {
                                PastOrders pastOrders = new PastOrders(querySnapshots.getString("name"),
                                        querySnapshots.getString("location"),
                                        querySnapshots.getString("CID"),
                                        querySnapshots.getString("Amount"),
                                        querySnapshots.getDate("date")

                                );
                                pastOrdersList.add(pastOrders);
                            }
                            adapter = new RecyclerViewAdapter(FetchPastOrders.this, pastOrdersList);
                            recyclerView.setAdapter(adapter);
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(FetchPastOrders.this, "Problem", Toast.LENGTH_SHORT).show();
                            Log.e("Error", "Error");
                        }
                    });
        }

    }





    package com.example.merchant;

    import android.view.View;
    import android.widget.TextView;

    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;

    public class RecyclerViewHolder extends RecyclerView.ViewHolder {

       public  TextView Name;
        public TextView Amount;
        public  TextView CID;
        public  TextView Location;
        public TextView orderId;
        public TextView Date;
        public RecyclerViewHolder(@NonNull View itemView) {
            super(itemView);


            Name = itemView.findViewById(R.id.Name);
            Amount = itemView.findViewById(R.id.Amount);
            CID = itemView.findViewById(R.id.CID);
            orderId = itemView.findViewById(R.id.orderId);
            Location = itemView.findViewById(R.id.location);
            Date = itemView.findViewById(R.id.date);

        }
    }
Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
Anshul Kumar
  • 31
  • 1
  • 3
  • **[This](https://stackoverflow.com/questions/50741958/how-to-paginate-firestore-with-android)** is a recommended way in which you can paginate queries by combining query cursors with the limit() method. I also recommend you take a look at this **[video](https://www.youtube.com/watch?v=KdgKvLll07s)** for a better understanding. – Alex Mamo Jun 12 '20 at 06:58

0 Answers0