Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中单击RecylerView项时如何更改文本颜色_Android_Colors - Fatal编程技术网

在android中单击RecylerView项时如何更改文本颜色

在android中单击RecylerView项时如何更改文本颜色,android,colors,Android,Colors,这是适配器 public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.CategoryAdapterObjectHolder> { private static String LOG_TAG = "CategoryAdapter"; private List<Category> mCategory; private static MyClickListener myClickList

这是适配器

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);
  }
}                               
我的商品是白色的

我想知道什么时候:

我在=0的位置单击

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

我单击位置==1:

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

我单击位置==2:

位置的文本颜色==2变为深色,位置不同的背景颜色为白色

我单击位置==3:

位置的文本颜色==3变为深色,位置不同的背景颜色为白色


求你了。救救我

我不确定我是否完全理解您试图实现的目标,但如果您试图更改
文本字段
文本的颜色,并假设调用了您的
监听器

创建一个包含所有
文本视图的字段

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 );
                    }
                }
            });
}
@覆盖
恢复时公开作废(){
super.onResume();
((CategoryAdapter)适配器)(
新建CategoryAdapter.MyClickListener(){
@凌驾
公共空间单击(内部位置,视图v){
Color-white=getResources().getColor(R.Color.Color\u text\u-white);
Color dark=getResources().getColor(R.Color.Color\u text\u dark);
对于(int i=0;i
1-在适配器中创建变量currentPosition默认值=-1

private int currentPosition =-1;
2-onBindViewHolder设置默认文本颜色黑色,当用户单击查看时:

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


@凌驾
public void onBindViewHolder(最终DataObjectHolder,最终int位置){
ViewGroup.LayoutParams LayoutParams=holder.view.getLayoutParams();
holder.view.setLayoutParams(layoutParams);
最终字符串text=mDataSet.get(位置);
holder.textView.setTextColor(Color.BLACK);
holder.textView.setText(文本);
holder.view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(当前位置>=0){
通知项已更改(当前位置);
}
holder.textView.setTextColor(Color.WHITE);
当前位置=位置;
}
});
}

类ColorAdapter扩展了RecyclerView.Adapter{
语境;
ArrayList颜色内容;
int当前位置=-1;
int前一个_位置=-1;
公共ColorAdapter(上下文上下文,ArrayList colorContents){
this.context=上下文;
this.colorContents=colorContents;
}
@非空
@凌驾
public ColorSizeViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
视图v=LayoutFlater.from(上下文)。充气(R.layout.color\u size\u model,parent,false);
返回新的ColorSizeViewer文件夹(v);
}
@凌驾
public void onBindViewHolder(@NonNull final ColorSizeViewHolder holder,final int position){
holder.color_size.setText(colorContents.get(position.getColor());
holder.color\u size.setTextColor(context.getResources().getColor(R.color.colorAccent));
支架。颜色和尺寸。设置标签(位置);
holder.color\u size.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int pos=(int)v.getTag();
holder.color_size.setTextColor(context.getResources().getColor(R.color.colorPrimary));
当前位置=位置;
如果(上一个位置!=-1和当前位置!=上一个位置)
{
通知项已更改(以前的位置);
}
先前位置=位置;
}
});
holder.setItemClickListner(新的ItemClickListner(){
@凌驾
公共区域(内部位置){
}
});
}
@凌驾
public int getItemCount(){
返回colorContents.size();
}

}

我想。您误解了我的问题,因此您是否有4个不同的文本字段,希望在单击某个位置时更改其颜色?很抱歉,我真的不明白您的问题所在,请您添加一些解释,说明此解决方案如何解决问题?单击时,请更改颜色并指定再次单击时的条件因此,如果我们再次单击同一位置,则颜色不会删除以前的位置用于重置默认颜色和当前位置用于检查条件,因此,如果单击任何其他位置,则文本颜色将由于错误条件而保持不变,因此颜色会发生变化
private int currentPosition =-1;

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

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();
}