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

时间:2017-05-26 12:58:59

标签: java android android-recyclerview recycler-adapter fastadapter

我需要一些帮助。我从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;
            }
        });

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 使用ColorStateList
  2. 最简单的解决方案是为该项目定义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
    2. FastAdapter允许您在选择时启用bindView被调用。通过以下方式启用此功能:FastAdapter.withSelectWithItemUpdate(true)在此之后调用该元素的bindView方法,您只需检查isSelected并定义ColorFilter或不是

      1. 手动通知Adapter
      2. 如果适配器不应自动调用notify方法,您也可以通过fastAdapter.notifyAdapterItemChanged(position)自行执行此操作(您可以选择另外传递payload,这样您就可以检查对于bindView方法中的那个之后的bindView方法中的isSelected方法再次检查Error 500 - Internal Server Error方法,并根据需要处理用户界面