【问题标题】:How to change RecyclerView items color from MainActivity?如何从 MainActivity 更改 RecyclerView 项目的颜色?
【发布时间】:2018-08-10 05:30:14
【问题描述】:

我有一个具有回收站视图的应用程序。我想给用户一个在夜间和白天模式主题之间切换的机会。我知道如何更改文本颜色和背景颜色,但在这种情况下我不能。实际上我无法从 MainActivity 中找到项目布局变量。如何从 MainActivity 创建 ViewHolder 类的对象?谁能帮帮我?

这是我的适配器类:

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 来定义用户选择的颜色的状态。根据用户选择更新这些值时通知回收站视图
  • 你想改变颜色 onclick 或别的什么?
  • 创建静态方法并从您的 mainActivity 访问
  • other 先检查当前在 setAdater 或 Init Adapter 之前选择了哪种模式,并在 BindViewHolder 检查条件下根据需要应用
  • 嘿@Ashvin 兄弟,我尝试了很多,但每次都失败了。如果你能提供一个演示,我将非常感激你。

标签: android android-recyclerview android-cardview android-text-color


【解决方案1】:

如果是单选列表,可以在列表中定义int参数,在adapter中定义方法

....
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 中检查该参数

【讨论】:

    【解决方案2】:

    我找到了您问题的解决方案 在您的活动中创建一个方法并在单击适配器中的项目并发送位置时调用

    public void click(int position) {
      TestAdapter.ViewHolder viewHolder = (TestAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position);
    
      viewHolder.text_color.setTextColor(Color.parseColor("#245251"));
    }
    

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多