2016-11-28 59 views
0

我有一个使用回收站视图的项目列表。我需要改变项目的文本颜色(文本视图颜色),当它被选中时表示特定的项目被选中。以下是我的适配器代码。请建议我如何实现这一点。如何更改回收站视图中选定项目的文本颜色

@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; 
     } 
    }); 
} 
+0

的可能的复制[?如何正确地突出显示RecyclerView所选项目(http://stackoverflow.com/questions/27194044/how-to-properly -highlight-selected-item-on-recyclerview) – 0X0nosugar

+0

@ 0X0nosugar我想改变文字颜色。不想让它高亮。 – Andrain

+0

请查看[这个答案](http://stackoverflow.com/a/35360331/5015207)到链接的问题。唯一的区别是其他OP想要突出显示某些内容('setBackgroundColor()'),而您想要更改文本颜色('setTextColor()')。 – 0X0nosugar

回答

0

在你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)); 
      } 
相关问题