0

我想为我的回收视图实现多选择适配器。我使用Mike Penz的FastAdapter来达到同样的效果。如何切换快速适配器库中的视图颜色

我不确定如何切换选定的项目视图颜色。

这里是代码片段,附加ClickEventHook<SimpleItem>在项目,以便onClick()在卡片视图点击时被称为卡片视图,

private void setupFastAdapter() { 
    mFastAdapter = new FastAdapter<>(); 

    // Configure the FastAdapter. 
    mFastAdapter.withSelectable(true); 
    mFastAdapter.withMultiSelect(true); 
    mFastAdapter.withSelectOnLongClick(false); 

    mFastAdapter.withSelectionListener(new ISelectionListener<SimpleItem>() { 
     @Override 
     public void onSelectionChanged(SimpleItem item, boolean selected) { 
      // Toggle the card and text colors. 
      if (selected) { 
       Logger.i("Selected [%s]", item.getText()); 
      } else { 
       Logger.i("Unselected [%s]", item.getText()); 
      } 
     } 
    }); 

    // Click listeners for views inside the item, add an `EventHook` to the `FastAdapter` by 
    // implementing either a `ClickEventHook`, `LongClickEventHook`, `TouchEventHook`, `CustomEventHook` 
    mFastAdapter.withEventHook(new ClickEventHook<SimpleItem>() { 
     private CardView cardView; 
     private TextView textView; 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      //return the views on which you want to bind this event 
      if (viewHolder instanceof SimpleItem.ViewHolder) { 
       cardView = ((SimpleItem.ViewHolder) viewHolder).mCardView; 
       textView = ((SimpleItem.ViewHolder) viewHolder).mTextView; 
       return cardView; 
      } else { 
       return null; 
      } 
     } 

     @Override 
     public void onClick(View v, int position, FastAdapter<SimpleItem> fastAdapter, SimpleItem item) { 
      //react on the click event 
      Logger.i("Clicked [%s]", item.getText()); 
      if (cardView.isSelected()) { 
       cardView.setCardBackgroundColor(getActivity().getResources().getColor(R.color.app_green_dark)); 
       textView.setTextColor(getActivity().getResources().getColor(R.color.app_white)); 
      } else { 
       cardView.setCardBackgroundColor(getActivity().getResources().getColor(R.color.app_light_blue_50)); 
       textView.setTextColor(getActivity().getResources().getColor(R.color.primary_text)); 
      } 
     } 
    }); 
} 

彩色文本视图的卡片视图和文字颜色不切换。我不确定它是如何正确实施的。

我观察到onSelectionChanged()方法也不会在单击项目中的卡片视图时调用。

任何人都可以建议我切换卡片视图和选择和取消选择文本的颜色的方法吗?

谢谢你在前进,
玛尼

回答

0

我会建议使用ColorStateList或设置状态特定背景的一个StateListDrawable

在示例应用程序中使用了类似这样的东西。

你可以看到一个简单的实现这样一个StateListDrawablehere的:

StateListDrawable状态=新StateListDrawable();

ColorDrawable clrActive = new ColorDrawable(selected_color); 
states.addState(new int[]{android.R.attr.state_selected}, clrActive); 

states.addState(new int[]{}, ContextCompat.getDrawable(ctx, getSelectableBackground(ctx))); 

这甚至支持动画:

//if possible we enable animating across states 
if (animate) { 
    int duration = ctx.getResources().getInteger(android.R.integer.config_shortAnimTime); 
    states.setEnterFadeDuration(duration); 
    states.setExitFadeDuration(duration); 
}