CardView меняет цвет текста при нажатии на другой CardView - PullRequest
1 голос
/ 24 апреля 2020

У меня проблема при нажатии на CardView. У меня есть RecyclerView с CardViews, где я хочу сделать один выбор. Первый щелчок делает это правильно, но когда я нажимаю на другой, цвет текста предыдущего CardView меняется на белый.

Вот код для моего адаптера:

 holder.setiRecyclerItemSelectedListener(new IRecyclerItemSelectedListener() {
        @Override
        public void onItemSelectedListener(View view, int pos) {
            // Loop all cards in card list
            for (CardView cardView: cardViewList) {
                if (cardView.getTag() == null) // Only available card time slots
                {
                    cardView.setCardBackgroundColor(context.getColor(R.color.colorWhite));
                    holder.txt_time_slot.setTextColor(context.getColor(android.R.color.tab_indicator_text));
                    holder.txt_time_slot_description.setTextColor(context.getColor(android.R.color.tab_indicator_text));
                }
            }

            // Color of selected card time slot
            holder.card_time_slot.setCardBackgroundColor(context.getColor(R.color.colorPrimaryLight));
            holder.txt_time_slot.setTextColor(context.getColor(R.color.colorWhite));
            holder.txt_time_slot_description.setTextColor(context.getColor(R.color.colorWhite));

            // Send broadcast to enable button NEXT
            Intent intent = new Intent(Common.KEY_ENABLE_BUTTON_NEXT);
            intent.putExtra(Common.KEY_TIME_SLOT, position); // Put index of time slot we have selected
            intent.putExtra(Common.KEY_STEP, 3);
            localBroadcastManager.sendBroadcast(intent);
        }
    });

Изображения:

Первый делает это правильно

First does it correctly

Второй не

Second one doesn't

Ответы [ 3 ]

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

Полагаю, вам следует сделать недействительными ваши представления в RecyclerView. Поэтому, в соответствии с вашим вопросом, я думаю, что вы должны вызвать функцию notifyDataSetChanged(), или вы должны сделать недействительным заданный элемент c в RV, вызвав notifyItemChanged(position). Надеюсь, это поможет

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

Определить выбранный индекс в адаптере:

int selectedIndex = -1;

Вы можете получить доступ к дочернему элементу recyclerView с помощью этого метода:

findViewHolderForAdapterPosition(position);

изменить onClicklistener:

if (selectedIndex != -1) 
{
    YourHolder holderOld = (YourHolder) recycleView.findViewHolderForAdapterPosition(selectedIndex);
    holderOld.cardView.setCardBackgroundColor(context.getColor(R.color.colorWhite));
    holderOld.txt_time_slot.setTextColor(context.getColor(android.R.color.tab_indicator_text));
    holderOld.txt_time_slot_description.setTextColor(context.getColor(android.R.color.tab_indicator_text));
}

selectedIndex = pos;
holder.card_time_slot.setCardBackgroundColor(context.getColor(R.color.colorPrimaryLight));
holder.txt_time_slot.setTextColor(context.getColor(R.color.colorWhite));
holder.txt_time_slot_description.setTextColor(context.getColor(R.color.colorWhite));
0 голосов
/ 24 апреля 2020

Я думал, что вы подразумевали цвет выбранных функций времени карты из } устройства, использующего его, и завершали предыдущую функцию, не меняя ее, что может помочь

...