【问题标题】:how to change the text color of selected item inside recycler view如何在回收站视图中更改所选项目的文本颜色
【发布时间】:2016-11-29 11:14:39
【问题描述】:

我有一个使用回收站视图的项目列表。我需要在选择项目时更改项目的文本颜色(textview 颜色)以指示选择了特定项目。下面是我的适配器代码。请建议我如何实现这一目标。

@Override
public GridView_Holder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

    View itemView = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.grid_customview, viewGroup, false);

    gridHolder = new GridView_Holder(itemView);
    ColorDrawable colorDrawableSelected = new ColorDrawable(context.getResources().getColor(R.color.borderColor));
    // create StateListDrawable object and define its states
    StateListDrawable stateListDrawable = new StateListDrawable();
    stateListDrawable.addState(new int[]{android.R.attr.state_selected}, colorDrawableSelected);
    stateListDrawable.addState(StateSet.WILD_CARD, null);
    // set the StateListDrawable as background of the item view
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        itemView.setBackgroundDrawable(stateListDrawable);
    }
    else {
        itemView.setBackground(stateListDrawable);
    }

    return  new GridView_Holder(itemView);
}


@Override
public void onBindViewHolder(GridView_Holder holder, int position) {

    model = arrayList.get(position);
    gridHolder = (GridView_Holder) holder;// Holder
    gridHolder.tvTitle.setText(model.getVideoName());    //set title                        

    Glide.with(context).load(model.getVideoImageThumbnail())
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(gridHolder.imageView);
}


@Override
public void onAttachedToRecyclerView(final RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    recyclerView.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            GridLayoutManager lm = ((GridLayoutManager) recyclerView.getLayoutManager());
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
                {
                    if(mCurrentSelectedPosition + 6 < getItemCount())
                    {
                        gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition);
                        gridHolder.itemView.setSelected(false);
                        notifyItemChanged(mCurrentSelectedPosition);
                        int lastItem = lm.findLastCompletelyVisibleItemPosition();
                        if((mCurrentSelectedPosition+6) > lastItem)
                        {
                        recyclerView.smoothScrollToPosition(mCurrentSelectedPosition+6);
                        }
                        else
                        {
                            gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition+6);
                            gridHolder.itemView.setSelected(true);
                        }

                        mCurrentSelectedPosition += 6 ;
                    }
                    return true;
                }
                else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) 
                {
                }

                else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
                    if(mCurrentSelectedPosition + 1 < getItemCount())
                    {
                        gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition);
                        gridHolder.itemView.setSelected(false);
                        notifyItemChanged(mCurrentSelectedPosition);
                        int lastItem = lm.findLastCompletelyVisibleItemPosition();
                        if((mCurrentSelectedPosition+1) > lastItem)
                        {
                                                        recyclerView.smoothScrollToPosition(mCurrentSelectedPosition+1);
                        }
                        else
                        {
                            gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition+1);
                            gridHolder.itemView.setSelected(true);
                        }
                        mCurrentSelectedPosition += 1 ;
                    }
                    return true;
                }
                return false;
        }
    });
}

【问题讨论】:

  • @0X0nosugar 我想更改文本颜色。不想让它高亮。
  • 请查看this answer链接的问题。唯一的区别是其他 OP 想要突出显示某些内容 (setBackgroundColor()) 而您想要更改文本颜色 (setTextColor())。
  • setTextColor() 当我这样称呼它时会出错。 holder.itemview.setTextColor()
  • holder.itemview 似乎是一个视图,所以没有文字。但也许你想改变 gridHolder.tvTitle 之类的颜色?

标签: android android-recyclerview


【解决方案1】:

在您的 GridView_Holder 类中:

public final TextView textView,

    public GridView_Holder(View itemView, int type) {
                super(itemView);
                textView = (TextView) itemView.findViewById(R.id.tv);
            }

         @Override
            public void onItemSelected() {
               textView.setTextColor(ContextCompat.getColor(context, R.color.accent));
            }

        @Override
            public void onItemClear() {
              textView.setTextColor(ContextCompat.getColor(context, R.color.primary));
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多