【问题标题】:How to change text color when click item of RecylerView in android在android中单击RecyclerView的项目时如何更改文本颜色
【发布时间】:2016-03-03 08:33:57
【问题描述】:

这是适配器!

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.CategoryAdapterObjectHolder> {
private static String LOG_TAG = "CategoryAdapter";
private List<Category> mCategory;
private static MyClickListener myClickListener;

public static class CategoryAdapterObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView mTextTitle;

    public CategoryAdapterObjectHolder(View itemView) {
        super(itemView);
        mTextTitle = (TextView) itemView.findViewById(R.id.text_menu);
        DebugTool.logD(LOG_TAG + "Adding Listener");
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        myClickListener.onItemClick(getPosition(), v);
    }
}

public void setOnItemClickListener(MyClickListener myClickListener) {
    this.myClickListener = myClickListener;

}

public CategoryAdapter(List<Category> myHistoryData) {
    mCategory = myHistoryData;
}


@Override
public CategoryAdapter.CategoryAdapterObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_menu, parent, false);
    CategoryAdapterObjectHolder dataObjectHolder = new CategoryAdapterObjectHolder(view);
    return dataObjectHolder;
}

@Override
public void onBindViewHolder(CategoryAdapter.CategoryAdapterObjectHolder holder, int position) {

    holder.mTextTitle.setText(mCategory.get(position).getName());


}

public void addItem(Category dataObj, int index) {
    mCategory.add(dataObj);
    notifyItemInserted(index);
}

public void deleteItem(int index) {
    mCategory.remove(index);
    notifyItemRemoved(index);
}

@Override
public int getItemCount() {
    return mCategory.size();
}


public interface MyClickListener {
    public void onItemClick(int position, View v);
  }
}                               

这是 OnItemClick

  @Override
public void onResume() {
    super.onResume();
    ((CategoryAdapter) adapter).setOnItemClickListener(
            new CategoryAdapter.MyClickListener() {
                @Override
                public void onItemClick(int position, View v) {
                    TextView mTextItem = (TextView) v.findViewById(R.id.text_menu);
               //     mTextItem.setTextColor(getResources().getColor(R.color.color_text_white));
                    if (position == 0) {
                       Utils.showToast(getContext(), "POSITION 0");
                    } else if (position == 1) {
                        Utils.showToast(getContext(), "POSITION 1");
                    } else if (position == 2) {

                        Utils.showToast(getContext(), "POSITION 2");
                    } else if (position == 3) {

                        Utils.showToast(getContext(), "POSITION 3");
                    } 
                }
            });
}

我的商品是白色的。

我想要什么时候:

我点击位置 == 0。

位置 == 0 的文本颜色项变为深色。和位置不同的颜色为白色。

我点击位置 == 1:

位置 == 1 的文本颜色项更改为深色。并定位不同的背色白色。

我点击位置 == 2:

位置 == 2 的文本颜色更改为深色并将不同的背景颜色设置为白色。

我点击位置 == 3:

位置 == 3 的文本颜色更改为深色,并将不同的背景颜色设置为白色。

请。帮帮我!

【问题讨论】:

    标签: android colors


    【解决方案1】:

    1- 在适配器

    中创建变量currentPosition default = -1
    private int currentPosition =-1;
    

    2- onBindViewHolder 设置默认文本颜色黑色 以及当用户点击查看时:

    • notifyItemChanged(currentPosition) - 更新旧视图的默认视图(重新加载)
    • 设置文本颜色白色

    
    @Override
        public void onBindViewHolder(final DataObjectHolder holder, final int position) {
            ViewGroup.LayoutParams layoutParams = holder.view.getLayoutParams();
            holder.view.setLayoutParams(layoutParams);
            final String text = mDataSet.get(position);
            holder.textView.setTextColor(Color.BLACK);
            holder.textView.setText(text);
            holder.view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(currentPosition>=0) {
                        notifyItemChanged(currentPosition);
                    }
                    holder.textView.setTextColor(Color.WHITE);
                    currentPosition=position;
                }
            });
    }
    
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您想要实现的目标,但如果您尝试更改 TextField 文本的颜色并假设您的 OnItemClickListener 正在被调用:

      创建一个包含所有TextViews 的字段。

      private TextView[] textViews;
      

      在您的 onCreateView 方法中。

      textViews = new TextView[4];
      textViews[0] = (TextView) view.findViewById(R.id.textViewOne);
      textViews[1] = (TextView) view.findViewById(R.id.textViewTwo);
      textViews[2] = (TextView) view.findViewById(R.id.textViewThree);
      textViews[3] = (TextView) view.findViewById(R.id.textViewFour);
      

      现在在您的OnItemClickListener

      @Override
      public void onResume() {
          super.onResume();
          ((CategoryAdapter) adapter).setOnItemClickListener(
                  new CategoryAdapter.MyClickListener() {
                      @Override
                      public void onItemClick(int position, View v) {
                          Color white = getResources().getColor( R.color.color_text_white );
                          Color dark = getResources().getColor( R.color.color_text_dark );
                          for ( int i = 0; i < textViews.length; i++ ) {
                               TextView textView = textViews[i];
                               if ( i == position ) 
                                   textView.setTextColor( dark );
                               else 
                                   textView.setTextColor( white );
                          }
                      }
                  });
      }
      

      【讨论】:

      • 我想。你误解了我的问题
      • 那么您是否有 4 个不同的文本字段要在单击某个位置时更改其颜色?
      • 对不起,我真的不明白你在问什么
      【解决方案3】:
      class ColorAdapter extends RecyclerView.Adapter<ColorSizeViewHolder> {
      Context context;
      ArrayList<ColorContents> colorContents;
      int current_position=-1;
      int previous_position=-1;
      public ColorAdapter(Context context, ArrayList<ColorContents> colorContents) {
          this.context = context;
          this.colorContents = colorContents;
      }
      
      
      @NonNull
      @Override
      public ColorSizeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          View v= LayoutInflater.from(context).inflate(R.layout.color_size_model,parent,false);
          return new ColorSizeViewHolder(v);
      
      }
      
      @Override
      public void onBindViewHolder(@NonNull final ColorSizeViewHolder holder, final int position) {
          holder.color_size.setText(colorContents.get(position).getColor());
          holder.color_size.setTextColor(context.getResources().getColor(R.color.colorAccent));
          holder.color_size.setTag(position);
      
          holder.color_size.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  int pos = (int)v.getTag();
      
      
                  holder.color_size.setTextColor(context.getResources().getColor(R.color.colorPrimary));
      
                  current_position=pos;
                  if (previous_position!=-1 && current_position!=previous_position)
                  {
                      notifyItemChanged(previous_position);
                  }
      
                  previous_position=pos;
      
      
              }
          });
      
      holder.setItemClickListner(new ItemClickListner() {
          @Override
          public void onItemClick(int pos) {
      
          }
      });
      
      }
      
      @Override
      public int getItemCount() {
          return colorContents.size();
      }
      

      }

      【讨论】:

      • 能否请您添加一些说明此解决方案如何解决问题?
      • 当点击所以颜色改变和条件指定当你再次点击所以颜色不删除以前的位置使用重置默认颜色和当前位置用于检查条件如果我们再次点击相同的位置所以文本颜色会如果单击任何其他位置,则由于错误条件而保持,因此颜色会改变
      猜你喜欢
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多