如何从 MainActivity 更改 RecyclerView 项目颜色?
How to change RecyclerView items color from MainActivity?
我有一个带有回收视图的应用程序。我想给用户一个机会在夜间和白天模式主题之间切换。我知道如何更改文本颜色和背景颜色,但在这种情况下我不能。实际上我无法从 MainActivity 中找到项目布局变量。如何从 MainActivity 创建 ViewHolder class 的对象?谁能帮帮我?
这是我的适配器 class:
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);
}
}
}
如果是单选列表,您可以在列表中定义一个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)
}
}
对于多选列表,您可以在 ListItemModel
中定义一个类似 isChosen 的参数,并将该参数更改为 true 和 false,然后在 OnBindViewHolder
中检查该参数
我找到了您的问题的解决方案
在您的 activity 中创建一个方法,并在单击适配器中的项目并发送位置时调用
public void click(int position) {
TestAdapter.ViewHolder viewHolder = (TestAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position);
viewHolder.text_color.setTextColor(Color.parseColor("#245251"));
}
希望对您有所帮助。
我有一个带有回收视图的应用程序。我想给用户一个机会在夜间和白天模式主题之间切换。我知道如何更改文本颜色和背景颜色,但在这种情况下我不能。实际上我无法从 MainActivity 中找到项目布局变量。如何从 MainActivity 创建 ViewHolder class 的对象?谁能帮帮我?
这是我的适配器 class:
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);
}
}
}
如果是单选列表,您可以在列表中定义一个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)
}
}
对于多选列表,您可以在 ListItemModel
中定义一个类似 isChosen 的参数,并将该参数更改为 true 和 false,然后在 OnBindViewHolder
中检查该参数
我找到了您的问题的解决方案 在您的 activity 中创建一个方法,并在单击适配器中的项目并发送位置时调用
public void click(int position) {
TestAdapter.ViewHolder viewHolder = (TestAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position);
viewHolder.text_color.setTextColor(Color.parseColor("#245251"));
}
希望对您有所帮助。