简体   繁体   中英

Recyclerview's Onscroll is not working while fetching data from firebase

I want to add onScroll Listener, but recyclerview's addonScrollListner() method is not doing anything, I want to fetch next ten items on every recyclerview's scroll.

At first time the data is fetching fine, but when i am scrolling recyclerview then nothing is happening, i am not able to find out why is this happening.

It is my code:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content);
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
        mAdView = findViewById(R.id.adView_con);
        progressBar = findViewById(R.id.contentprogressbar);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        recyclerView = findViewById(R.id.listview);
        mSwipeRefreshLayout = findViewById(R.id.swipeContainer);
        textView = findViewById(R.id.emptylist);
        backbtncontent = findViewById(R.id.backbtncntent);
        backbtncontent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(ContentActivity.this, HomeActivity.class);
                startActivity(i);
            }
        });

        classname = getIntent().getStringExtra("classname");
        if (classname.equals("A")) {
            content = getIntent().getStringExtra("jokecontent");
        } else if (classname.equals("B")) {
            content = getIntent().getStringExtra("shayaricontent");
        }
        getLastKeyFromFirebase();
        final LinearLayoutManager layoutManager= new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), layoutManager.getOrientation());
        recyclerView.addItemDecoration(dividerItemDecoration);
        arrayAdapter = new NewAdapterContent(contentname,this);
        recyclerView.setAdapter(arrayAdapter);
        getUsers();
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                total_item = layoutManager.getItemCount();
                last_visible_item = layoutManager.findLastCompletelyVisibleItemPosition();
                if(!isLoading && total_item<=((last_visible_item+ITEM_LOAD_COUNT))){
                     getUsers();
                     isLoading = true;
                }
            }
        });

    }

    private void getUsers()
    {
        if (!isMaxData) {
            Query query;
            if (classname.equals("A")) {
                if (TextUtils.isEmpty(last_nodes)) //wait content to aa n raehre
                    query = FirebaseDatabase.getInstance().getReference("ContentJokes")
                            .orderByChild("subcategory")
                            .equalTo(content)
                            .limitToFirst(ITEM_LOAD_COUNT);

                else
                    query = FirebaseDatabase.getInstance().getReference("ContentJokes")
                            .orderByChild("subcategory")
                            //.equalTo(content)
                            .startAt(last_nodes)
                            .limitToFirst(ITEM_LOAD_COUNT);
                //1 sec wait cll ari kisi ki


                query.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        if (!dataSnapshot.exists()) {
                            //hello ?
                            isLoading = false;
                            isMaxData = true;
                         //   progressBar.setVisibility(View.GONE);
                            Toast.makeText(ContentActivity.this, "There is no jokes present under this category", Toast.LENGTH_SHORT).show();
                        } else {
                            String contentdisplay = dataSnapshot.child("content").getValue(String.class);
                            String key = dataSnapshot.child("content").getKey();
                            ContentModel contentModel = new ContentModel(contentdisplay, key);
                            contentname.add(0, contentModel);
                            arrayAdapter.notifyDataSetChanged();
                            progressBar.setVisibility(View.GONE);
                            arrayAdapter.notifyItemInserted(0);
                            last_nodes = contentname.get(contentname.size() - 1).getId();
                            if (!last_nodes.equals(last_key)) {
                            } else
                                last_nodes = last_key;
                            isLoading = false;
                        }
                    }

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

                    }

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

                    }

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

                    }

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

                    }


                });
            } else if(classname.equals("B")){
                if (TextUtils.isEmpty(last_nodes)) //wait content to aa n raehre
                    query = FirebaseDatabase.getInstance().getReference("ContentShayari")
                            .orderByChild("subcategory")
                            .equalTo(content)
                            .limitToFirst(ITEM_LOAD_COUNT);

                else
                    query = FirebaseDatabase.getInstance().getReference("ContentShayari")
                            .orderByChild("subcategory")
                            .equalTo(content)
                            .startAt(last_nodes)
                            .limitToFirst(ITEM_LOAD_COUNT);


                query.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        if (!dataSnapshot.exists()) {

                            isLoading = false;
                            isMaxData = true;
                        //    progressBar.setVisibility(View.GONE);
                            Toast.makeText(ContentActivity.this, "There is no jokes present under this category", Toast.LENGTH_SHORT).show();
                        } else {
                            String contentdisplay = dataSnapshot.child("content").getValue(String.class);
                            String key = dataSnapshot.child("content").getKey();
                            ContentModel contentModel = new ContentModel(contentdisplay, key);
                            contentname.add(0, contentModel);
                            arrayAdapter.notifyDataSetChanged();
                          //  progressBar.setVisibility(View.GONE);
                            arrayAdapter.notifyItemInserted(0);
                            last_nodes = contentname.get(contentname.size() - 1).getId();
                            if (!last_nodes.equals(last_key)) {
                            } else
                                last_nodes = last_key;
                            isLoading = false;
                        }

                    }

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

                    }

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

                    }

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

                    }

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

                    }


                });
            }
        }
    }

    private void getLastKeyFromFirebase() {
        Query getLastKey;
        if (classname.equals("A")) {
            getLastKey = FirebaseDatabase.getInstance().getReference()
                    .child("ContentJokes")
                    .orderByChild("subcategory").equalTo(content)
                    .limitToLast(1);


            getLastKey.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    for (DataSnapshot lastKey : dataSnapshot.getChildren()) {
                        last_key = lastKey.getKey();
                        Toast.makeText(ContentActivity.this, String.valueOf(last_key), Toast.LENGTH_SHORT).show();
                    }
                }

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

                    Toast.makeText(ContentActivity.this, "cannot get last key", Toast.LENGTH_SHORT).show();
                }
            });
        } else if (classname.equals("B")) {
            getLastKey = FirebaseDatabase.getInstance().getReference()
                    .child("ContentShayari")
                    .orderByChild("subcategory").equalTo(content)
                    .limitToLast(1);


            getLastKey.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    for (DataSnapshot lastKey : dataSnapshot.getChildren()) {
                        last_key = lastKey.getKey();
                        Toast.makeText(ContentActivity.this, String.valueOf(last_key), Toast.LENGTH_SHORT).show();
                    }
                }

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

                    Toast.makeText(ContentActivity.this, "cannot get last key", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

RecyclerAdapter Code:

    public class NewAdapterContent extends RecyclerView.Adapter<NewAdapterContent.ViewHolder> {
    ArrayList<ContentModel>contentModels;
    Context context;

    public NewAdapterContent(ArrayList<ContentModel>contentModels, Context context) {
        this.contentModels = contentModels;
        this.context = context;
    }

    public void addAll(ArrayList<ContentModel>contentModels){
        int initSize = contentModels.size();
        contentModels.addAll(contentModels);
        notifyItemRangeChanged(initSize, contentModels.size());
    }
    public String getLastItemId(){
         return contentModels.get(contentModels.size()-1).getId();
    }
    @NonNull
    @Override
    public NewAdapterContent.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.content, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull NewAdapterContent.ViewHolder holder, int position) {
        holder.textView.setText(contentModels.get(position).getContent());

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.contentText);
        }
    }
}

Anytime of help would be appreciated. Please help.

Try it which is very easy to use that was worked for me by using the custom RecyclerView.OnScrollListener named EndlessRecyclerViewScrollListener -

EndlessRecyclerViewScrollListener scrollListener = new 
             EndlessRecyclerViewScrollListener(layoutManager) {

        @Override
        public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
           if(!isLoading){
                 getUsers();
                 isLoading = true;
            }
        }
    };

    recyclerView.addOnScrollListener(scrollListener);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM