Recyclerview: индивидуальный стиль для каждого элемента, который не обновляется при прокрутке - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу назначить собственный цвет текста для некоторых элементов в представлении реселлера, основываясь на поле объекта, который они представляют. Чтобы сделать это, в onBindViewHolder я поместил следующий код:

if(elements.get(position).colored) {
   holder.element_title.setTextColor(RED);
}

Однако, когда я прокручиваю, кажется, что цвет текста остается «прикрепленным» к представлению элемента, который затем используется для показать другие предметы. Поэтому некоторые элементы выглядят красными, а не должны. Чтобы исправить это, в упражнении, содержащем обзор реселлера, я попытался добавить следующий код:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
       super.onScrollStateChanged(recyclerView, newState);
       myAdapter.notifyDataSetChanged();
    }
});

Это, хотя и далеко не оптимально, кажется, решает проблему, когда я прокручиваю вниз, а не когда прокрутите вверх.

Как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

RecyclerView работает таким образом. Это перерабатывает ваш взгляд, как только они исчезли с вашего экрана. Подводя итог, отредактируйте ваш код следующим образом.

if(elements.get(position).colored) {
   holder.element_title.setTextColor(RED);
}else{
   holder.element_title.setTextColor(OTHER THAN RED);
}

и удалите addOnScrollListener, это не нужно.

1 голос
/ 10 апреля 2020

Это происходит потому, что вы устанавливаете только красный цвет без сброса цвета, если он не окрашен. Держатели представлений используются повторно для разных элементов, поэтому, если вы не сбросите настройки, они не изменятся. Так что вы должны сделать это

if(elements.get(position).colored) {
   holder.element_title.setTextColor(RED);
} else {
holder.element_title.setTextColor(DEFAULT_COLOR);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...