У меня есть приложение с 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);
}
}
}
вы хотите изменить цвет onclick или что-то еще?
создать статический метод и получить доступ из вашего mainActivity
другие сначала проверьте, какой режим выбран в настоящее время, перед setAdater или Init Adapter и в условии проверки BindViewHolder и примените, как вы хотите
эй @ Ашвин, братан, я много пробовал, но каждый раз терпел неудачу. Буду очень признателен, если вы дадите демоверсию.
ты получил ответ, братан @Ravi
Если это единственный список выбора, вы можете определить параметр 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"));
}
Надеюсь, что это поможет вам.
Используйте в наборе данных переменные text_color и card_bg_color, которые определяют состояние цветов, выбранных пользователем. При обновлении этих значений на основе выбора пользователя уведомить ресайклер.