0

i want to apply onScroll listener on my list view but my all values loaded before scroll but i want to load 10 values first time and then on scroll more 10 values should be loaded and so on...

list.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


                int loadedItems = firstVisibleItem + visibleItemCount;
                if((loadedItems == totalItemCount) && !isloading){
                    //value = value+1;
                    if(task != null && (task.getStatus() == AsyncTask.Status.FINISHED)){
                        //isloading = false;
                        task = new Webconnection();
                        task.execute();
                    }
                }

            }
        });

Webconnceion Class

 class Webconnection extends AsyncTask<Void, Void, Void> {

            LinearLayout linlaHeaderProgress = (LinearLayout)getView().findViewById(R.id.linlaHeaderProgress);

            @Override
            protected void onPreExecute() {
                linlaHeaderProgress.setVisibility(View.VISIBLE);
                super.onPreExecute();

            }

            @Override
            protected Void doInBackground(Void... voids) {

                try {
                    RestClient client = new RestClient("http://192.168.100.16/html/services/connectpk/web/app.php/api/jobs");
                    client.AddParam("p", String.valueOf(value));
                    client.AddParam("limit", String.valueOf(offset));

                    try {
                        client.Execute(RequestMethod.GET);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    response = client.getResponse();

                    //JSONObject jObj = new JSONObject(response);
                    //JSONArray jArray =  jObj.getJSONArray("");
                    JSONArray jArray = new JSONArray(response);       

                        for (int i = 0; i <= offset; i++){
                   // for (int i = 0; i < jArray.length(); i++) {
                             isloading = true;

                        JSONObject jRealObject = jArray.getJSONObject(i);

                        JobsModel actors = new JobsModel();
                        actors.setJobTitle(jRealObject.getString("job_title"));
                        actors.setCompanyLogo(jRealObject.getString("company_logo"));
                        actors.setCompanyName(jRealObject.getString("company_name"));
                        actors.setJobLocation(jRealObject.getString("job_city"));
                        actors.setJobDescription(jRealObject.getString("job_description"));
                       // actors.setJobQualification(jRealObject.getString("description"));
                       // actors.setJobBasicSalary(jRealObject.getString("description"));
                        actors.setJobLastDate(jRealObject.getString("job_startdate"));
                        actorlist.add(actors);

                            value+=1;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);      

                try {      

                    if (response != null) {
                        //Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();

                        adapter = new JobsAdapter(getActivity(), R.layout.activity_jobs, actorlist);
                        list.setAdapter(adapter);

                        linlaHeaderProgress.setVisibility(View.GONE);
                                    isloading = false;
                                    adapter.notifyDataSetChanged();       

                    }
                } catch (Exception e) {
                    Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_SHORT).show();

                    e.printStackTrace();       

                }
            }
        }
Sanoop Surendran
  • 3,484
  • 4
  • 28
  • 49

2 Answers2

0

don't use onScroll. Use lazy loading. In short it means load more data once your adapter's getView() is called for the last, or pre-last position

Vladyslav Matviienko
  • 10,610
  • 4
  • 33
  • 52
0
@Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {

        if((firstVisibleItem + visibleItemCount) ==  totalItemCount)
        {
            Log.i("Info", "Scroll Bottom" );
        }
    }});
Divyang Patel
  • 347
  • 3
  • 14