无法更改图像视图的图像颜色

Not able to change the image color of the image view

我需要一些帮助。我正在从 JSON.Fetching 数据中获取数据。它由图像和文本组成,我正在使用快速适配器(mike penz)填充到回收器视图中,但是当我 select 来自回收器视图的指定行时,它需要更改图像颜色。我在哪里可以使用 selector 更改文本视图颜色,但我无法在 selected 行的图像视图中更改图像的颜色。请帮帮我。这是代码:

service_type_adapter.withOnClickListener(new FastAdapter.OnClickListener<Service_Type_Adapter>() {
            @Override
            public boolean onClick(View v, IAdapter<Service_Type_Adapter> adapter, Service_Type_Adapter item, int position) {
                AppCompatImageView service_image= (AppCompatImageView) v.findViewById(R.id.service_image);
                int service_imagecolors = ContextCompat.getColor(getApplicationContext(), R.color.skyblue);
                service_image.setColorFilter(service_imagecolors, PorterDuff.Mode.SRC_IN);
                service_type_adapter.select(position);
                if (lastselectedposition != -1) {
                    service_type_adapter.deselect(lastselectedposition);
                }
                lastselectedposition = position;
                servicetypename = item.getServicename();
                action = item.getServiceid();
                googlemap.clear();
                onMapReady(googlemap);
                return true;
            }
        });

FastAdapterOnClickListener 已经为您提供了所需的一切。它传递点击的项目,以及负责特定项目的 Adapter

因此,当用户单击该项目(并且您已为该项目启用选择)时,FastAdapter 将自动将该项目的 state 设置为选中。

在这种情况下有多种自动应用颜色的方法:

  1. 使用ColorStateList

最简单的解决方案是为该项目定义 ColorStateList 而不是简单的颜色。例如,您可以有一个 Foreground 并且如果选择了状态则只定义半透明颜色。 一个非常简单的 ColorStateList 可能如下所示:

return new ColorStateList(
                new int[][]{
                        new int[]{android.R.attr.state_selected},
                        new int[]{}
                },
                new int[] {
                        colorSelected,
                        Color.TRANSPARENT
                }
        );
  1. Automatically Notify Adapter 关于变化

FastAdapter 允许您启用 bindView 在选择的情况下被调用。通过以下方式启用:FastAdapter.withSelectWithItemUpdate(true) 在此之后调用该元素的 bindView 方法,您可以简单地检查 isSelected 并定义 ColorFilter 或不

  1. 手动通知Adapter

如果适配器不应自动调用 notify 方法,您也可以通过执行 fastAdapter.notifyAdapterItemChanged(position) 自行执行此操作(您可以选择另外传递 payload,因此您可以在 bindView 方法中检查那个)然后在 bindView 方法中再次检查 isSelected 或不检查 UI 根据需要处理