recyclerview paginacja

0

Cześć mam problem z paginacją, sprawdzalem postmanem i ze strony serwera wszystko jest ok, jednakze w aplikacji wiadomosci mi sie powtarzaja

 int lim1 = 0;
    int lim2 = 20; 


  mLayoutManager=new LinearLayoutManager(getActivity());
        RecycleViewGetAll.setLayoutManager(mLayoutManager);
        RecycleViewGetAll.setHasFixedSize(true);

        RecycleViewGetAll.addOnScrollListener(new EndlessRecyclerViewScrollListener(mLayoutManager) {
            @Override
            public void onLoadMore(int current_page) {
           
     loadNextDataFromApi();
            }
        });

        adapter = new DataAdapter(bus, sharedpref, manager);
        RecycleViewGetAll.setAdapter(adapter);

   lim1 = lim1+20;
            lim2 = lim2+20;
            manager.loadall(lim1,lim2);
 loadlall:
       fragment.show(response.body().results);
fragment:
   public void show(List<News> results) {

        refreshlayout.setRefreshing(false);
        adapter.seList(results);


    }
 adapter:
    public void seList(List<News> results) {
        newslist.addAll(results);
        notifyDataSetChanged();
    }

stworzylem metode clear:

     public void clearAdapter() {

       newslist.clear();
        notifyDataSetChanged();
    }

i wywoluje ją tylko gdy wprowadzam nowe dane,
wlaczajac aplikacje mam pierwsze 20 wiadomosci, gdy zjade na dol to jest 60 ale sie powatrzaja, gdzie popelnilem blad?

0

nie zauwazylem zadnych nie prawidłowości w debugerze , wszystko wydaję się być ok

0

w każdym miejscu gdzie "przechodzi " results dodalem loga i sprawdzam rozmiar listy,
gdy wlaczam apke na poczatku jest luz bo:
D/okhttp manager: 20 . -< manager pobierajacy dane z serwra
D/okhttp fragment: 20 - fragment - odbiera od managera i wysyla do adaptera
D/okhttp res: 20 <- adapter - w metodzie dodajacej wyniki do listy
D/okhttp adapt 20 <- adapter - w metodzie dodajacej wyniki do listy - lista w ktorej są wszystkie wyniki

ale gdy dojde na dól listy to wtedy rozmiar sie zmienia

D/okhttp manager: 40 .
D/okhttp fragment: 40
D/okhttp res: 40
D/okhttp adapt 60
czyli wychodzi ze to wina retrofita,

zapytanie tworze /api/getAll/0/20 i nastepne to jest api/getAll/20/40 i jak sprawdzam w postmanie to prawidlowo wyswietla wyniki

  public void loadall(int limit1, int limit2) {

        call = api.getall(limit1,limit2,userStorage.getId());
        call.enqueue(new Callback<NewsResponse>() {
            @Override
            public void onResponse(Call<NewsResponse> call, Response<NewsResponse> response) {
                if (response.isSuccessful()) {
                  
                    Log.d("okhttp adm manager", String.valueOf(response.body().results.size()));
                        if (fragment != null) {
                            fragment.show(response.body().results);

                    }
                }
            }
  @Override
            public void onFailure(Call<NewsResponse> call, Throwable t) {
          }
        });
    }
0

zapewniam Cię że to nie wina retrofita. coś masz sknocone w logice. Jak nie pokażesz kodu adaptera to Ci raczej nikt z fusów nie wywróży co tam się dzieje

0
 public class adapter extends RecyclerView.Adapter<adapterViewHolder> {


private Bus bus;
    private List<News> neslist = new ArrayList<>();

    Shared shared;
    manager manager;

    public adapter(Bus bus,Shared shared,manager mangaer) {

        this.bus = bus;
        this.shared=shared;
        this.manager = manager;

    }

    @Override
    public adapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        return new adapterViewHolder(layoutInflater.inflate(R.layout.item_news, parent, false),shared,bus);


    }

    @Override
    public void onBindViewHolder(final adapterViewHolder holder, final int position) {


       holder.setNews(neslist.get(position));
      
    }


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

    public void setlist(List<News> results) {
        neslist.addAll(results);
        notifyDataSetChanged();

        Log.d("okhttp res", String.valueOf(results.size()));
      //  Log.d("okhttp ads",String.valueOf(adslist.size()));
    }
    public void clearAdapter() {

       neslist.clear();
        notifyDataSetChanged();
    }

}

class adapterViewHolder extends RecyclerView.ViewHolder {

    Fragment fragment;
    @BindView(R.id.CardViewTitle)
    TextView CardViewTitle;
    @BindView(R.id.CardViewCity)
    TextView CardViewCity;
   @BindView(R.id.CardViewImageView)
    ImageView CardViewImageView;
     @BindView(R.id.card_view)
    CardView cardView;
    private News news;

   Shared shared;
    manager manager;
    Bus bus;
  
    @Inject
    public adapterViewHolder(View itemView,Shared shared,Bus bus) {

        super(itemView);
   this.shared=shared;
            this.bus=bus;
        ButterKnife.bind(this, itemView);
    }


    public void setNews(final News news) {
        this.news = news;
       
        CardViewTitle.setText(news.title);
        CardViewCity.setText(news.city);
       

        Glide.with(CardViewImageView.getContext())
                .load(news.imageAds)
                .crossFade()
                .thumbnail(0.5f)
                .bitmapTransform(new CircleTransform(CardViewImageView.getContext()))
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .skipMemoryCache(true)
                .placeholder(R.drawable.ic_menu_slideshow)
                .into(CardViewImageView);

       
        if (news.apikey.equals(shared.getId())){
            CardViewButtonWiecej.setVisibility(View.VISIBLE);
        } else {
            CardViewButtonWiecej.setVisibility(View.INVISIBLE);
        }

    }
}


1

poza potworkami w stylu klasy z małej litery a pola z dużej to wygląda ok. Jesteś pewien że z api wraca dobrze ? coś masz skaszanione , pewnie gdzieś zamiast robić clear na liście dodajesz 2 razy to samo. ale w którym miejscu ciężko powiedzieć z tego kodu co pokazujesz

0

mój błąd, nazwy klas poprawiam, co sie okazało api pierwszą strone dawało prawidłową a następne duplikowało, juz wszystko działa, dzięki za pomoc

0

nie ma sprawy :)

pozdrawiam
:-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1