0

我需要一些帮助。我从JSON中获取数据。获取数据。它由图像和文本组成,我使用快速适配器(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; 
      } 
     }); 

回答

0

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 
       } 
     ); 
  • Automatically NotifyAdapter关于变更
  • FastAdapter允许您启用bindView被调用的情况下,的选择。通过使这样的:FastAdapter.withSelectWithItemUpdate(true)此该元素的bindView方法被调用之后,如果可以简单地检查isSelected并定义ColorFilter或不

  • 通知的Adapter手动
  • 如果适配器不应该自动调用notify方法,那么也可以通过执行fastAdapter.notifyAdapterItemChanged(position)(此外可以选择通过payload,因此您可以在bindView方法中检查那个方法),然后再次检查bindView方法为isSelected或不,并根据需要处理UI

    +0

    先生您能否给我举个例子? –

    +0

    关于什么? – mikepenz

    +0

    关于fastAdapter.notifyAdapterItemChanged(位置)我曾尝试过,但没有对它的影响先生 –