首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Fast Adapter库中切换视图颜色

如何在Fast Adapter库中切换视图颜色
EN

Stack Overflow用户
提问于 2017-08-13 02:36:32
回答 1查看 538关注 0票数 0

我想为我的回收器视图实现多选适配器。我正在使用Mike Penz的FastAdapter做同样的事情。

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

下面是代码片段,将ClickEventHook<SimpleItem>附加到项目中的卡片视图,以便在单击卡片视图时调用onClick()

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2017-08-14 03:04:27

我建议使用ColorStateListStateListDrawable来设置州的特定背景。

示例应用程序中使用了类似下面这样的内容。

您可以看到这样一个StateListDrawable here的简单实现

新状态= StateListDrawable StateListDrawable();

代码语言:javascript
复制
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)));

这甚至支持动画:

代码语言:javascript
复制
//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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45653666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档