Как изменить цвет элементов RecyclerView из MainActivity?

У меня есть приложение с recyclerview. Хочу дать возможность пользователям переключаться между темой ночного и дневного режима. Я знаю, как изменить цвет текста и цвет фона, но в данном случае не могу. На самом деле я не могу найти переменные макета элемента из MainActivity. Как создать объект класса ViewHolder из MainActivity? Может кто-нибудь мне помочь?

Вот мой класс адаптера:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{

    private List<ListItemModel> listItems;
    private Context context;

    public MyAdapter(List<ListItemModel> listItems, Context context) {
        this.listItems = listItems;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_model, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final ListItemModel listItem = listItems.get(position);
        holder.index_number.setText(listItem.getIndexNumber());
        holder.title_name.setText(listItem.getTitle());

    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView index_number, title_name;

        public ViewHolder(View itemView) {
            super(itemView);

            index_number = (TextView) itemView.findViewById(R.id.model_text_index_id);
            title_name = (TextView) itemView.findViewById(R.id.model_text_title_id);

        }

    }
}

Используйте в наборе данных переменные text_color и card_bg_color, которые определяют состояние цветов, выбранных пользователем. При обновлении этих значений на основе выбора пользователя уведомить ресайклер.

Killer 10.08.2018 07:33

вы хотите изменить цвет onclick или что-то еще?

sushildlh 10.08.2018 07:47

создать статический метод и получить доступ из вашего mainActivity

Ashvin solanki 10.08.2018 08:25

другие сначала проверьте, какой режим выбран в настоящее время, перед setAdater или Init Adapter и в условии проверки BindViewHolder и примените, как вы хотите

Ashvin solanki 10.08.2018 08:27

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

Ravi 10.08.2018 08:50

ты получил ответ, братан @Ravi

Ashvin solanki 10.08.2018 10:51
0
6
1 348
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Если это единственный список выбора, вы можете определить параметр int в своем списке и определить метод в адаптере.

....
private int selectedPosition = -1;

public void setSelectedPosition(int index){
  selectedPosition  = index;
  notifyItemChanged(selectedPosition)
}

затем в OnBindViewHolder сделайте это:

 @Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final ListItemModel listItem = listItems.get(position);

    holder.index_number.setText(listItem.getIndexNumber());
    holder.title_name.setText(listItem.getTitle());

    if (position == selectedPosition){
      holder.index_number.setTextColor(MY_COLOR)
      holder.title_name.setTextColor(MY_COLOR)
    } else {
      holder.index_number.setTextColor(NORMAL_COLOR)
      holder.title_name.setTextColor(NORMAL_COLOR)
    }

}

Для списка с множественным выбором вы можете определить такой параметр, как isChosen, в вашем ListItemModel и изменить этот параметр на true и false, а в вашем OnBindViewHolder проверить этот параметр

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

public void click(int position) {
  TestAdapter.ViewHolder viewHolder = (TestAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position);

  viewHolder.text_color.setTextColor(Color.parseColor("#245251"));
}

Надеюсь, что это поможет вам.

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