Список просмотра списков ресайклеров изменен неверно.

57
5

Я создал адаптер для просмотра ресайклеров. На основе элемента в адаптере я пытаюсь изменить пользовательский интерфейс для этой строки. Когда экран загружен, пользовательский интерфейс отображается правильно. Но как только я просматриваю, экран обновляется даже для строк, где это не должно быть. Вот код:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
final OrderItem order = mItems.get(i);
viewHolder.tvName.setText(getCustomers().get(order.getmConsumerId()).getProfile().getFirstName().toUpperCase() );
viewHolder.tvDelType.setText(getDeliveryType(order.getmDeliveryType()));
viewHolder.tvTime.setText(formatTime(order.getmETATime()));//format time before present
viewHolder.tvAmt.setText("Rs " + order.getmAmount());
viewHolder.rlvName.setTitleText(order.getmConsumerId().substring(0, 1));
viewHolder.rlvName.setTitleSize(82f);
viewHolder.tvDetails.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, OrderDetailsActivity.class);
Gson gson = new Gson();
String ord = gson.toJson(order);
String user = gson.toJson(getCustomers().get(order.getmConsumerId()));
intent.putExtra("orderItem", ord);
intent.putExtra("user", user);
context.startActivity(intent);
}
});
setListeners(viewHolder, order, i);
//setStatus(viewHolder,order,i);
if(!order.getmOrderStatus().equals(Constants.ENUM_ORDERS_STATUS_PENDING))
{
viewHolder.tvOrderStatus.setText((order.getmOrderStatus().toUpperCase()));
viewHolder.tvOrderStatus.setVisibility(View.VISIBLE);
viewHolder.llButtons.setVisibility(View.GONE);
}

//viewHolder.rlvName.setBackgroundColor(Color.parseColor("FF0000"));
}

Поэтому, основываясь на ценности моего заказа, мне нужно изменить пользовательский интерфейс строки. После прокрутки он изменяет значения строки, в которой она не должна быть.

Пожалуйста, предложите.

спросил(а) 2020-04-04T01:00:33+03:00 5 месяцев, 4 недели назад
1
Решение
57

Из-за взглядов диспетчерского управления RAM Management, режим recyler пытается загрузить карты из кеша, и из-за вашего кэша просмотра recyler элементы загружаются некорректно. для предотвращения этого вы должны добавить else к своему, if это так:

if(!order.getmOrderStatus().equals(Constants.ENUM_ORDERS_STATUS_PENDING))
{
viewHolder.tvOrderStatus.setText((order.getmOrderStatus().toUpperCase()));
viewHolder.tvOrderStatus.setVisibility(View.VISIBLE);
viewHolder.llButtons.setVisibility(View.GONE);
}
else
{
//The Default Item View Settings Here...
}

ответил(а) 2020-04-04T01:12:51.112990+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема