0

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

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;
            }
        });
4

1 回答 1

0

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

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

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

  1. 使用ColorStateList

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

return new ColorStateList(
                new int[][]{
                        new int[]{android.R.attr.state_selected},
                        new int[]{}
                },
                new int[] {
                        colorSelected,
                        Color.TRANSPARENT
                }
        );
  1. Adapter自动通知更改

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

  1. Adapter手动通知

如果适配器不应该自动调用该notify方法,您也可以自己执行此操作fastAdapter.notifyAdapterItemChanged(position)(您可以选择另外传递一个有效负载,因此您可以在方法中检查该方法),然后在方法中bindView再次检查是否并根据需要处理 UIbindViewisSelected

于 2017-06-02T11:59:34.527 回答