У меня есть дочерний 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);
}
});
}
Я бы хотел, чтобы это был вариант @NathanGetachew, но крайне важно, чтобы элементы были разделены на разделы, отсюда и причина для параметра просмотра вложенного ресайклера.
В адаптер представления дочернего ресайклера добавьте код, который прослушивает событие onClick для определенного элемента, видит его позицию и, наконец, применяет изменения в элементе в этой позиции.
Я сделал это @Sulav, но поскольку я использую вложенный recyclerView, ранее выбранные элементы в других разделах родительского recyclerView не отменяются при выборе элементов в другом разделе.
Можете ли вы добавить код того, что вы пробовали до сих пор?
Я отредактировал вопрос, чтобы добавить код и фотографию того, что я пробовал, как и советовали.
Вы можете создать оперативные данные и изменить их значение на 1 или 0. 1, если выбран родительский элемент 0, если выбран дочерний элемент, и использовать эти оперативные данные в подшивке для автоматического переключения.
Большое спасибо, @Sulav, вы были более чем полезны
Добро пожаловать, бро Удачного кодирования
@Sulav Parajuli Я столкнулся с той же проблемой, и в этом посте нет правильного ответа. Принятый не работает для вложенных представлений переработчика. Не могли бы вы помочь?
Использование материала recyclerView само по себе прекрасно.