当我滚动加载更多数据但它每次重复前10项

时间:2018-02-03 05:39:42

标签: android

我想使用getMoredata()获取并打印包含更多事件的所有项目。当我将此功能用于加载项时,它会重复我已经获取并打印的前10个数据。

但是当我向下滚动时,我需要获取并打印下面的5个数据。所以请帮助我如何使用此代码。

以下是代码:

package com.ejobbox.loadmore;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ProgressBar;

import java.util.ArrayList;
import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ProgressBar progressBar;
    private LinearLayoutManager mLayoutManager;
    private RecyclerViewAdapter adapter;
    private ArrayList<Model> list;
    private String baseURL="http://ejobbox.com/";
    Boolean isScrolling=false;
    int currentItem,totalItem,scrollOutItem,lastItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView= findViewById(R.id.recyclerView);
        progressBar=findViewById(R.id.progress);

        mLayoutManager=new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(mLayoutManager);

        list=new ArrayList<Model>();
        // call retrofit

        getRetrofit();

        adapter=new RecyclerViewAdapter(list,MainActivity.this);
        recyclerView.setAdapter(adapter);

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if(newState== AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){
                    isScrolling=true;
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                currentItem=mLayoutManager.getChildCount();
                totalItem=mLayoutManager.getItemCount();
                scrollOutItem=mLayoutManager.findFirstVisibleItemPosition();
                lastItem=mLayoutManager.findLastVisibleItemPosition();
                if(isScrolling&&(currentItem+scrollOutItem==totalItem))
                {
                    isScrolling=false;
                    fatchData();
                }
            }
        });

    }

    private void fatchData() {
        progressBar.setVisibility(View.VISIBLE);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                getMoredata();
            }
        },5000);
    }


    private void getRetrofit(){
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseURL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
        Call<List<WPPost>> call= service.getPostInfo();

        call.enqueue(new Callback<List<WPPost>>() {
            @Override
            public void onResponse(Call<List<WPPost>> call, Response<List<WPPost>> response) {
                Log.e("mainactivty","response"+ response.body());
                progressBar.setVisibility(View.GONE);

                for(int i=0; i<10;i++){

                    Log.e ("main","Title"+ response.body().get(i).getTitle().getRendered()+"  "+
                            response.body().get(i).getId());

                    String tempdetails=response.body().get(i).getExcerpt().getRendered().toString();
                    tempdetails=tempdetails.replace("<p>","");
                    tempdetails=tempdetails.replace("</p>","");

                    list.add(new Model(Model.IMAGE_TYPE, response.body().get(i).getTitle().getRendered(),
                            tempdetails,
                            response.body().get(i).getLinks().getWpFeaturedmedia().get(0).getHref()) );
                }
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<List<WPPost>> call, Throwable t) {

            }
        });
    }

    private void getMoredata(){
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(baseURL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
        Call<List<WPPost>> call= service.getPostInfo();

        call.enqueue(new Callback<List<WPPost>>() {
            @Override
            public void onResponse(Call<List<WPPost>> call, Response<List<WPPost>> response) {
                Log.e("mainactivty","response"+ response.body());
                progressBar.setVisibility(View.GONE);

                for(int i=0; i<5;i++){

                    Log.e ("main","Title"+ response.body().get(i).getTitle().getRendered()+"  "+
                            response.body().get(i).getId());

                    String tempdetails=response.body().get(i).getExcerpt().getRendered().toString();
                    tempdetails=tempdetails.replace("<p>","");
                    tempdetails=tempdetails.replace("</p>","");

                    list.add(new Model(Model.IMAGE_TYPE, response.body().get(i).getTitle().getRendered(),
                            tempdetails,
                            response.body().get(i).getLinks().getWpFeaturedmedia().get(0).getHref()) );
                }
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<List<WPPost>> call, Throwable t) {

            }
        });
    }
}

0 个答案:

没有答案