0

I am using firebase real time database. I have an app with messaging feature. In the message box, I show the messages with a custom adapter. The user can only see the last 15 incoming messages. I want 10 more messages to be loaded automatically when it gets to the bottom. How can I do that?

 RecyclerView recyclerViewlist;
    ProgressBar messageref ;

LinearLayoutManager linearLayoutManager ;

private final List<ModelMessageFragment> postListnew =new ArrayList<>();
    private AdapterMessageFragment adapterMessageFragment ;
private int itemPos = 0;
    private String mLastKey = "";
    private String mPrevKey = "";
    static final int total_ITEMS = 15 ;
    int currentpage = 1 ;


 mAuth = FirebaseAuth.getInstance();
        FirebaseUser mFirebaseUser = mAuth.getCurrentUser();
        if(mFirebaseUser != null) {
            currentUserID = mFirebaseUser.getUid(); 

            Lastrefnew = FirebaseDatabase.getInstance().getReference().child("LastMessage").child(currentUserID);


adapterMessageFragment = new AdapterMessageFragment(postListnew);
            recyclerViewlist.setHasFixedSize(true);
            linearLayoutManager = new LinearLayoutManager(getContext());
            linearLayoutManager.setReverseLayout(true);
            linearLayoutManager.setStackFromEnd(true);
            recyclerViewlist.setLayoutManager(linearLayoutManager);
            recyclerViewlist.setAdapter(adapterMessageFragment);


            getallmessage();


public void getallmessage (){

        Query query = Lastrefnew.orderByChild("timestamp").limitToLast(currentpage * total_ITEMS);

        query.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            messageref.setVisibility(View.GONE);


                try {

                    ModelMessageFragment post = dataSnapshot.getValue(ModelMessageFragment.class);

                    itemPos++;

                    if(itemPos == 1){

                        String messageKey = dataSnapshot.getKey();

                        mLastKey = messageKey;
                        mPrevKey = messageKey;

                    }

                    postListnew.add(post);
                    adapterMessageFragment.notifyDataSetChanged();
                    recyclerViewlist.smoothScrollToPosition(recyclerViewlist.getAdapter().getItemCount());

                    recyclerViewlist.scrollToPosition(postListnew.size() - 1);
                    messageref.setVisibility(View.GONE);       
                    recyclerViewlist.setVisibility(View.VISIBLE);

                }catch (Exception e){

                }


            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
   if (messageref != null) {
                    messageref.setVisibility(View.GONE);
                }
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });




    }

xml

 <com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout
        android:id="@+id/messagerefresh"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_below="@id/appbarmessagechat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <androidx.recyclerview.widget.RecyclerView
            android:layout_below="@id/appbarmessagechat"
            android:id="@+id/recyclerViewlist"
            android:layout_marginTop="3dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


        </androidx.recyclerview.widget.RecyclerView>


    </com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout>

AdapterMessageFragment

public class AdapterMessageFragment extends RecyclerView.Adapter<AdapterMessageFragment.MessageFragmentViewHolder> {

    private List<ModelMessageFragment> postListnew;
    private FirebaseAuth mAuth;
    String currentUserid ;

    int[] photos={ R.drawable.c, R.drawable.e, R.drawable.xz,
            R.drawable.xzz, R.drawable.xzzz,R.drawable.kk,
    };

  
    public AdapterMessageFragment(List<ModelMessageFragment> postListnew) {
        this.postListnew = postListnew ;
        

    }

 public class MessageFragmentViewHolder extends RecyclerView.ViewHolder{
        CircleImageView profileImage ;
        ImageView onlinestatus , seenstatus;
        TextView  userName , userTime , messageinfooo;
        View mView;
        public MessageFragmentViewHolder(@NonNull View itemView) {
            super(itemView);

            profileImage =itemView.findViewById(R.id.messageprofileimageee);
            userName =itemView.findViewById(R.id.messagenameee);
            onlinestatus =itemView.findViewById(R.id.onlinestatus);
            seenstatus =itemView.findViewById(R.id.seenstatus);
            userTime =itemView.findViewById(R.id.messagetime);
            messageinfooo =itemView.findViewById(R.id.messageinfooo);

        }
    }

 @Override
    public MessageFragmentViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
           
                View menuItemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
                        R.layout.message_list_model, viewGroup, false);

                return new MessageFragmentViewHolder(menuItemLayoutView);

    }

@Override
    public void onBindViewHolder(@NonNull MessageFragmentViewHolder holder, int i) {

                mAuth = FirebaseAuth.getInstance();
                currentUserid = mAuth.getCurrentUser().getUid();

                ModelMessageFragment post = (ModelMessageFragment) postListnew.get(i);

                Random ran=new Random();
                int ii=ran.nextInt(photos.length);
        holder.profileImage.setImageResource(photos[ii]);

                DatabaseReference UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");

                String usersIDs = post.getC();

                UsersRef.child(usersIDs).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if (snapshot.hasChild("name")){
                            final String myUsername = snapshot.child("name").getValue().toString();
                            holder.userName.setText(myUsername);
                        }

                        if (snapshot.hasChild("photoid")){
                            final String userphoto = snapshot.child("photoid").getValue().toString();
                            if (userphoto.equals("alien")){
                                holder.profileImage.setImageResource(R.drawable.alien50);
                            }else if (userphoto.equals("dragon")){
                                holder.profileImage.setImageResource(R.drawable.dragon50);
                            }else if (userphoto.equals("pug")){
                                holder.profileImage.setImageResource(R.drawable.pug50);
                            }else if (userphoto.equals("doge")){
                                holder.profileImage.setImageResource(R.drawable.doge50);
                         
                        }else {

                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                });

                String getlastseen = post.getS();



                try {
                    if (getlastseen.equals("notseen")){
                        Typeface boldTypeface = Typeface.defaultFromStyle(Typeface.BOLD);
                        holder.messageinfooo.setTypeface(boldTypeface);
                        holder.userTime.setTypeface(boldTypeface);
                        holder.userName.setTypeface(boldTypeface);
                        holder.userTime.getResources().getColor(R.color.messagefragmentnotseen);
                        holder.userName.getResources().getColor(R.color.messagefragmentnotseen);
                        holder.messageinfooo.getResources().getColor(R.color.messagefragmentnotseen);

                        holder.seenstatus.setVisibility(View.VISIBLE);
                    }else {

                    }
                }catch (Exception e){

                }

        holder.messageinfooo.setText(post.getL());
                String groupdate = post.getT();

                Long Timestamp2 = Long.parseLong(groupdate);
                Date timeD = new Date(Timestamp2 * 1000);
                SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy hh:mm:ss aa");
                String Time = sdf.format(timeD);



                String  gettime = zaman2(Time);
         
        holder.userTime.setText(gettime);


        holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Intent chatintent = new Intent(v.getContext(), Chat.class);
                        chatintent.putExtra("visit_user_id",post.getC());
                        v.getContext().startActivity(chatintent);


                    }
                });


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

    private String zaman2(String Time) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy hh:mm:ss aa");
        try {
            long time = sdf.parse(Time).getTime();
            long now = System.currentTimeMillis();
            CharSequence ago =
                    DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
            return ago+"";
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "";
    }

ModelMessageFragment

public class ModelMessageFragment {
    public String l;
    public String d;
    public String t ;
    public String s;
    public String c;



    public ModelMessageFragment(String l, String d, String t, String s, String c ) {
        this.l = l;
        this.d = d;
        this.t = t;
        this.s = s;
        this.c = c;


    }

    public String getL() {
        return l;
    }

    public void setL(String l) {
        this.l = l;
    }

    public String getD() {
        return d;
    }

    public void setD(String d) {
        this.d = d;
    }

    public String getT() {
        return t;
    }

    public void setT(String t) {
        this.t = t;
    }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }

    public String getC() {
        return c;
    }

    public void setC(String c) {
        this.c = c;
    }

    public ModelMessageFragment() {


    }
}

0 Answers0