Как выделить выбранный дочерний элемент во вложенном RecyclerView

У меня есть дочерний recyclerView, вложенный в родительский recyclerView, дающий мне представление о темах в разных главах, как показано на прикрепленной фотографии ниже.

MY CHALLENGE выделяет один выбранный дочерний элемент (тему) в любом данном разделе или главе (вложенный дочерний RecyclerView).

Как видно на фото, элементы (или Тема), выбранные ранее в любом другом разделе (главе), не отменяются при выборе темы из другого раздела. Может кто-нибудь подсказать, КАК лучше всего выделить выбранный элемент во вложенном recyclerView.

ЗДЕСЬ мой фрагмент кода для Child RecyclerView.

   @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Topic topic = topicList.get(position);
    holder.clearSelection();

    if (currentItemPosition == position) {
        holder.position.setTextColor(holder.itemView.getResources().getColor(R.color.red));
        holder.title.setTextColor(holder.itemView.getResources().getColor(R.color.red));
        holder.description.setTextColor(holder.itemView.getResources().getColor(R.color.blue));

    } else {
        holder.position.setTextColor(holder.itemView.getResources().getColor(R.color.black));
        holder.title.setTextColor(holder.itemView.getResources().getColor(R.color.black));
        holder.description.setTextColor(holder.itemView.getResources().getColor(R.color.black));
    }

    holder.position.setText(String.valueOf(topic.getPosition()));
    holder.title.setText(topic.getTitle());
    holder.description.setText(topic.getDescription());
    holder.duration.setText(topic.getDuration());

    if (downloadedTopics.contains(topic.getTitle())) {
        holder.downloadIcon.setImageResource(R.drawable.downloaded_icon);
    } else {
        holder.downloadIcon.setImageResource(R.drawable.undownloaded_icon);
    }

}

ЗДЕСЬ это OnBindViewHolder родительского (или основного RecyclerView)

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    ArrayList<View> topicViewList = new ArrayList<>();
    RootTopic topicGroup = rootTopicsGroupList.get(position);
    ArrayList<Topic>topicList = topicGroup.getTopicGroup();

    String titleConstruct = "Chapter " + (position + 1) + "- " + topicGroup.getRootTopicName();
    holder.SectionTitle.setText(titleConstruct);
    setUpTopicGroupRec(topicList,downloadedTopicList,holder.groupedTopicsRV,holder.itemView.getContext());
    
}

Вот вызываемый метод setUpTopicGroupRec

 private void setUpTopicGroupRec(ArrayList<Topic> topicList, ArrayList<String>downloads, RecyclerView recyclerView, Context context, ArrayList<RootTopic> rootTopicsGroupList){
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context,RecyclerView.VERTICAL,false);
    topicAdapter = new TopicAdapter(topicList, downloads);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(topicAdapter);

    topicAdapter.setOnItemClickListener(new TopicAdapter.OnItemClickListener() {
        @Override
        public void onTopicClick(int position, Topic topic) {
            currentTopic = topic;
            onTopicClickLD.postValue(currentTopic);
            int currentTopicPos = topic.getPosition();
           
        }

        @Override
        public void onDownloadIconClick(int position, Topic topic) {
            currentTopic = topic;
            onDownloadIconClickLD.postValue(currentTopic);
            
        }
    });

}

Использование материала recyclerView само по себе прекрасно.

Nathan Getachew 21.12.2020 00:42

Я бы хотел, чтобы это был вариант @NathanGetachew, но крайне важно, чтобы элементы были разделены на разделы, отсюда и причина для параметра просмотра вложенного ресайклера.

Eric 21.12.2020 13:28
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
2
575
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я сделал это @Sulav, но поскольку я использую вложенный recyclerView, ранее выбранные элементы в других разделах родительского recyclerView не отменяются при выборе элементов в другом разделе.

Eric 21.12.2020 13:32

Можете ли вы добавить код того, что вы пробовали до сих пор?

Sulav Parajuli 21.12.2020 13:58

Я отредактировал вопрос, чтобы добавить код и фотографию того, что я пробовал, как и советовали.

Eric 21.12.2020 16:33

Вы можете создать оперативные данные и изменить их значение на 1 или 0. 1, если выбран родительский элемент 0, если выбран дочерний элемент, и использовать эти оперативные данные в подшивке для автоматического переключения.

Sulav Parajuli 22.12.2020 02:12

Большое спасибо, @Sulav, вы были более чем полезны

Eric 22.12.2020 17:12

Добро пожаловать, бро Удачного кодирования

Sulav Parajuli 23.12.2020 02:18

@Sulav Parajuli Я столкнулся с той же проблемой, и в этом посте нет правильного ответа. Принятый не работает для вложенных представлений переработчика. Не могли бы вы помочь?

M. Azyoksul 22.04.2021 20:59

Другие вопросы по теме