Retrofit + Recycler.Adapter

Вообщем, идея такова. Есть RecyclerView, который должен добавлять CardView, и изменять параметры. Параметры должены приходить запросом, запросы деляться на id ( тобишь, отправляются id на сервер, получаем запрос - запихиваем в CardView ), таких запросов может быть N кол-во, ( зависит от нажатой кнопки ). Сделал recyclerView.setHasFixedSize(true) , передал N Адаптеру. В Адаптере public void onBindViewHolder(@NonNull CardViewHolder holder, int position) , retrofit принимает запросы, но порой он не успевает из за интернета все принять , и происходит ахинея на экране.

На данный фрагмент накладывается CardView через Адаптер:

public class FullCardFragment extends Fragment {
private RecyclerView recyclerView;
private CardAdapter cardAdapter;
private View root;





@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    root =inflater.inflate(R.layout.fragment_full_card, container, false);
    init();
    return root;
}
private void init(){

    recyclerView = root.findViewById(R.id.rv_container);
    LinearLayoutManager linearLayoutManager =new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(linearLayoutManager);
   // recyclerView.setHasFixedSize(true);
    cardAdapter = new CardAdapter(getArguments().getInt("countCard"));
  //  CardAdapter.setPartnerArrayList(partnerArrayList);
    recyclerView.setAdapter(cardAdapter);
}

Сам адаптер:

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CardViewHolder> {
private Retrofit retrofit;
private API api;
private final String URL = "******";
private int i;
private static ArrayList<String> numbersCategory =new ArrayList<>(); // номера категорий, которые есть в категории
private Gson gson;
private static ArrayList<Partner> partnerArrayList = new ArrayList<>();
private int numberItems;


public static void setNumberItem(ArrayList<String> array){
    numbersCategory.clear();
    numbersCategory.addAll(array);
}

public CardAdapter(int numberOfItems){  // количество Холдеров
numberItems = numberOfItems;
}


@NonNull
@Override
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    int layoutIdListItem = R.layout.fragment_card;
    LayoutInflater inflater =LayoutInflater.from(context);
    View view = inflater.inflate(layoutIdListItem,parent,false);
    CardViewHolder cardViewHolder = new CardViewHolder(view);
    init();
    return cardViewHolder;
}
private void init(){
    //retrofit
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    api = retrofit.create(API.class);
    System.out.println(numbersCategory.get(i) + " Проверка категории");


}

@Override
public void onBindViewHolder(@NonNull CardViewHolder holder, int position) {
    Call<Partner> partnerCall = api.partnerId(Integer.parseInt(numbersCategory.get(position)));
    partnerCall.enqueue(new Callback<Partner>() {
        @Override
        public void onResponse(Call<Partner> call, Response<Partner> response) {
            System.out.println(" Загрузил" );
            partnerArrayList.add(response.body());

        }

        @Override
        public void onFailure(Call<Partner> call, Throwable throwable) {
            System.out.println(throwable);
        }
    });
    if (partnerArrayList.size()!=0) {
        System.out.println(position + " позиция");
        holder.bind(partnerArrayList.get(position));
    }
}

@Override
public int getItemCount() {
    return numberItems;
}

class CardViewHolder extends RecyclerView.ViewHolder {
    private TextView titleShop;
    private TextView titleBarShop;
    private TextView description;

    public CardViewHolder(@NonNull View itemView) {
        super(itemView);
        titleShop = itemView.findViewById(R.id.titleShop);
        titleBarShop = itemView.findViewById(R.id.titleBarShop);
        description = itemView.findViewById(R.id.descriptionShop);
    }

    void bind(Partner partner) {

            System.out.println("проверка");
                titleShop.setText(partner.getTitle());
            // description.setText(partner.getText());


    }
}

Если не убирать фиксированный размер, то ошибок никаких не вылетает, он просто начинает кидать на экран что попало ( Может по 2 раза повторить одну Card, может вообще ничего не загрузить и оставить образец ). Если setHasFixedSize(true) - выходит ошибка java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 - если начинаешь прокручивать


Ответы (0 шт):