无法更改图像视图的图像颜色
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;
}
});
FastAdapter 的OnClickListener
已经为您提供了所需的一切。它传递点击的项目,以及负责特定项目的 Adapter
。
因此,当用户单击该项目(并且您已为该项目启用选择)时,FastAdapter
将自动将该项目的 state
设置为选中。
在这种情况下有多种自动应用颜色的方法:
最简单的解决方案是为该项目定义 ColorStateList
而不是简单的颜色。例如,您可以有一个 Foreground
并且如果选择了状态则只定义半透明颜色。
一个非常简单的 ColorStateList
可能如下所示:
return new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_selected},
new int[]{}
},
new int[] {
colorSelected,
Color.TRANSPARENT
}
);
- Automatically Notify
Adapter
关于变化
FastAdapter
允许您启用 bindView
在选择的情况下被调用。通过以下方式启用:FastAdapter.withSelectWithItemUpdate(true)
在此之后调用该元素的 bindView
方法,您可以简单地检查 isSelected
并定义 ColorFilter
或不
- 手动通知
Adapter
如果适配器不应自动调用 notify
方法,您也可以通过执行 fastAdapter.notifyAdapterItemChanged(position)
自行执行此操作(您可以选择另外传递 payload,因此您可以在 bindView
方法中检查那个)然后在 bindView
方法中再次检查 isSelected
或不检查 UI 根据需要处理
我需要一些帮助。我正在从 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;
}
});
FastAdapter 的OnClickListener
已经为您提供了所需的一切。它传递点击的项目,以及负责特定项目的 Adapter
。
因此,当用户单击该项目(并且您已为该项目启用选择)时,FastAdapter
将自动将该项目的 state
设置为选中。
在这种情况下有多种自动应用颜色的方法:
最简单的解决方案是为该项目定义 ColorStateList
而不是简单的颜色。例如,您可以有一个 Foreground
并且如果选择了状态则只定义半透明颜色。
一个非常简单的 ColorStateList
可能如下所示:
return new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_selected},
new int[]{}
},
new int[] {
colorSelected,
Color.TRANSPARENT
}
);
- Automatically Notify
Adapter
关于变化
FastAdapter
允许您启用 bindView
在选择的情况下被调用。通过以下方式启用:FastAdapter.withSelectWithItemUpdate(true)
在此之后调用该元素的 bindView
方法,您可以简单地检查 isSelected
并定义 ColorFilter
或不
- 手动通知
Adapter
如果适配器不应自动调用 notify
方法,您也可以通过执行 fastAdapter.notifyAdapterItemChanged(position)
自行执行此操作(您可以选择另外传递 payload,因此您可以在 bindView
方法中检查那个)然后在 bindView
方法中再次检查 isSelected
或不检查 UI 根据需要处理