我想为我的回收器视图实现多选适配器。我正在使用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()方法。
有没有人能推荐一种方法,在选择和取消选择时切换卡片视图和文本的颜色?
先谢谢你,
Mani
发布于 2017-08-14 03:04:27
我建议使用ColorStateList或StateListDrawable来设置州的特定背景。
示例应用程序中使用了类似下面这样的内容。
您可以看到这样一个StateListDrawable here的简单实现
新状态= 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);
}https://stackoverflow.com/questions/45653666
复制相似问题