После нажатия кнопки назад с кого-либо фрагмента, к мою recyclerView добавляется еще один такой же recyclerView и так до бесконечности

Хотя бы наводку где скорее всего проблема.

До нажатия: введите сюда описание изображения

После нажатия(добавились еще эти же элементы): введите сюда описание изображения

Мой адаптер:

public class HoroscopeAdapter extends RecyclerView.Adapter<HoroscopeAdapter.HoroscopeViewHolder> {

List<HoroscopeData> horoscopeDataList;
private Context context;
int resId;

public HoroscopeAdapter(Context context, List<HoroscopeData> horoscopeDataList) {
    this.context = context;
    this.horoscopeDataList = horoscopeDataList;
}

@NonNull
@Override
public HoroscopeAdapter.HoroscopeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horoscope_list_row, parent, false);
    return new HoroscopeViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull HoroscopeAdapter.HoroscopeViewHolder holder, int position) {
    HoroscopeData horoscopeData = horoscopeDataList.get(position);
    holder.zodiacName.setText(horoscopeData.zodiacName);
    resId = context.getResources().getIdentifier(horoscopeData.zodiacImageName, "drawable", "com.alex.horoscopeapp");
    holder.imageView.setBackgroundResource(resId);

}

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

class HoroscopeViewHolder extends RecyclerView.ViewHolder {
    LinearLayout parent;
    TextView zodiacName;
    ImageView imageView;



    public HoroscopeViewHolder(@NonNull View itemView) {
        super(itemView);
        parent = itemView.findViewById(R.id.parent);
        zodiacName = itemView.findViewById(R.id.zodiacName);
        imageView = itemView.findViewById(R.id.imageView);


        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Bundle bundle = new Bundle();
                bundle.putString("zodiacName", zodiacName.getText().toString());
                Navigation.findNavController(view).navigate(R.id.nav_showHoroscope, bundle);



            }
        });

    }


}

}

Установка адаптера:

public class HoroscopeFragment extends Fragment {


private final List<HoroscopeData> horoscopeDataArrayList = new ArrayList<>();

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_horoscope, container, false);


    RecyclerView recyclerView = root.findViewById(R.id.recycler_view);
    ImageView imageView = root.findViewById(R.id.imageView);


    HoroscopeAdapter horoscopeAdapter = new HoroscopeAdapter(getContext(), horoscopeDataArrayList);
    RecyclerView.LayoutManager manager = new GridLayoutManager(getContext(), 3);
    recyclerView.setLayoutManager(manager);
    recyclerView.setAdapter(horoscopeAdapter);

    String[] zodiacArrayEng = {"taurus", "gemini", "cancer", "leo", "virgo", "libra", "scorpio", "sagittarius", "capricorn", "aquarius", "pisces"};
    String[] zodiacArrayRus = {"телец", "близнецы", "рак", "лев", "дева", "весы", "скорпион", "стрелец", "козерог", "водолей", "рыбы"};

    HoroscopeData horoscopeData = new HoroscopeData("ОВЕН", "aries200", imageView);
    horoscopeDataArrayList.add(horoscopeData);

    for (int i = 0; i < zodiacArrayEng.length; i++) {
        horoscopeData = new HoroscopeData(zodiacArrayRus[i].toUpperCase(), zodiacArrayEng[i].toLowerCase() + "200", imageView);
        horoscopeDataArrayList.add(horoscopeData);
    }


    return root;
}

}


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

Автор решения: avoloshinn

Как вариант попробуйте очищать список horoscopeDataArrayList.clear() перед добавлением элементов. Перед for.

→ Ссылка