onBindHolder звонил несколько раз, сколько нужно Ресайклер Посмотреть вид, если только новый. Поэтому каждый раз, когда вы устанавливаете видимость в дочерних представлениях, другие состояния представлений также являются изменениями.
Всякий раз, когда вы прокручиваете вверх и вниз, эти представления получают повторное рисование с неправильными параметрами видимости, поэтому всегда указывайте, что условия, вызывающие просмотр recycler, не знают предыдущего состояния/условий/значений наших виджетов.
Решение:
Если в случае, если блок установить видимость любого андроида widget.setVisibility (View.Gone), то в блоке еще вы должны установить его видимость напротив vwith widget.setVisibility (View.Visible), чтобы преодолеть вышеупомянутая проблема.
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.tvName.setText(ModelCategoryProducts.name.get(i));
viewHolder.tvPrice.setText("Rs."+String.format("%.2f", Float.parseFloat(ModelCategoryProducts.price.get(i))));
if(ModelCategoryProducts.special_price.get(i).equals("null")) {
viewHolder.tvSpecialPrice.setVisibility(View.GONE); // here visibility is gone and in else it's opposite visibility i set.
viewHolder.tvPrice.setTextColor(Color.parseColor("#ff0000"));
viewHolder.tvPrice.setPaintFlags(0);// here paint flag is 0 and in else it's opposite flag that i want is set.
}else if(!ModelCategoryProducts.special_price.get(i).equals("null")){
viewHolder.tvPrice.setTextColor(Color.parseColor("#E0E0E0"));
viewHolder.tvSpecialPrice.setVisibility(View.VISIBLE);
viewHolder.tvSpecialPrice.setText("Rs." + String.format("%.2f", Float.parseFloat(ModelCategoryProducts.special_price.get(i))));
viewHolder.tvPrice.setPaintFlags(viewHolder.tvPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
if (!ModelCategoryProducts.image_url.get(i).isEmpty()) {
Picasso.with(context)
.load(ModelCategoryProducts.image_url.get(i))
.into(viewHolder.ivProduct);
}
viewHolder.setClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
if (isLongClick) {
// Toast.makeText(context, "#" + position + " - " + ModelCategoryProducts.name.get(position) + " (Long click)", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "#" + position + " - " + ModelCategoryProducts.name.get(position), Toast.LENGTH_SHORT).show();
Intent i = new Intent(context, ProductDetail.class);
i.putExtra("position",position);
i.putExtra("flagHlvCheck", 5);
context.startActivity(i);
}
}
});
}
Предлагаю вам написать специальные компоненты для просмотра. Видимость настроек не является хорошей реализацией. Ваш проект находится на git? Поэтому я могу создать запрос на перенос к нему dostum;)? –
Я бы настоятельно рекомендовал * рефакторинг * вашего кода, прежде чем продолжить. Чрезвычайно трудно следовать, и у вас есть ПУТЬ ко многим представлениям. Вы должны иметь возможность создавать много из них динамически, чтобы помочь сократить некоторые коды. Я действительно считаю, что проблемы находятся в 'onBindViewHolder'. –
@ EmreAktürk К сожалению, его нет на git из-за этого есть некоторые специальные веб-сервисы из моего университета. Что я могу реализовать с пользовательским представлением, я не могу понять :) Я не могу думать, что делать, любая помощь будет отличной. -JaredBurrows На самом деле веб-сервис просмотра настолько грязный. Сервис имеет 10 полей Vize, и все они содержат лекционные знаки. Я пытаюсь проверить, не является ли поле Vize (метка) пустым из службы, а затем показать текст. –