Android 更改ListView中一行的颜色

Android 更改ListView中一行的颜色,android,listview,android-text-color,Android,Listview,Android Text Color,我想制作一个列表视图,其中一些元素具有白色文本颜色,而另一些元素具有黑色文本颜色 以下是我目前的代码: ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(My_Activity.this, R.layout.row_lay, R.id.textViewList, myarray); listLead.setAdapter(arrayAdapter); ArrayAdapter ArrayAdapte

我想制作一个
列表视图
,其中一些元素具有
白色
文本颜色,而另一些元素具有
黑色
文本颜色

以下是我目前的代码:

ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(My_Activity.this, R.layout.row_lay, R.id.textViewList, myarray);
listLead.setAdapter(arrayAdapter);
ArrayAdapter ArrayAdapter=
新的ArrayAdapter(My_Activity.this、R.layout.row_lay、R.id.textViewList、myarray);
listLead.setAdapter(arrayAdapter);
我可以修改我的
R.layout.row\u lay
的文本颜色,但这会更改我的ListView中所有行的颜色。例如,我如何做一行一种颜色,另一行另一种颜色? 有可能做到这一点吗?同一列表视图中的不同文本颜色


如果是,如何执行?

您将覆盖
ArrayAdapter的
getView
方法

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(My_Activity.this, R.layout.row_lay, R.id.textViewList, myarray) { 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);

    //your condition logic
    v.setBackgroundColor(yourColor);

    return v;
    }
};
ArrayAdapter ArrayAdapter=new ArrayAdapter(My_Activity.this,R.layout.row_lay,R.id.textViewList,myarray){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=super.getView(位置、转换视图、父级);
//你的条件逻辑
v、 挫折背景色(yourColor);
返回v;
}
};

您将覆盖
ArrayAdapter的
getView
方法

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(My_Activity.this, R.layout.row_lay, R.id.textViewList, myarray) { 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);

    //your condition logic
    v.setBackgroundColor(yourColor);

    return v;
    }
};
ArrayAdapter ArrayAdapter=new ArrayAdapter(My_Activity.this,R.layout.row_lay,R.id.textViewList,myarray){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=super.getView(位置、转换视图、父级);
//你的条件逻辑
v、 挫折背景色(yourColor);
返回v;
}
};

创建一个自定义适配器类,该类扩展了
ArrayAdapter
,并覆盖
getView
,如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent){
    View v = super.getView(position, convertView, parent);

    TextView text = (TextView) v.findViewById(R.id.my_textview_id);
    if (position == whiteColoredPosition){
        text.setTextColor(Color.WHITE);
    } else {
        text.setTextColor(Color.BLACK);
    }

    return v;
}

其中,
R.id.my\u textview\u id
textview
的id,
whiteColoredPosition
是列表视图中包含您希望为白色的textview的位置。

创建一个自定义适配器类,该类扩展
ArrayAdapter
,并覆盖
getView
,如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent){
    View v = super.getView(position, convertView, parent);

    TextView text = (TextView) v.findViewById(R.id.my_textview_id);
    if (position == whiteColoredPosition){
        text.setTextColor(Color.WHITE);
    } else {
        text.setTextColor(Color.BLACK);
    }

    return v;
}

其中,
R.id.my\u textview\u id
是您的
textview
的id,
whiteColoredPosition
是列表视图中包含您希望变为白色的textview的位置。

由于视图循环,在不满足条件时必须将其设置回原始颜色,否则在滚动时,它们都会着色,就好像它们满足特殊条件一样。@NameSpace,没错,您必须将其设置回原来的值。但我不知道OP的条件逻辑,这就是为什么我评论为
//您的条件逻辑
OP询问如何更改一行的颜色,您就是这样做的。我正在尝试您的答案,但有一个错误,问题上传了。@GMX因为您没有使用自定义适配器,您必须在声明适配器的地方编写内联。检查我的更新代码。由于视图循环,当不满足条件时,必须将其设置回原始颜色,否则当您滚动时,它们都会变为彩色,就像它们满足特殊条件一样。@命名空间,没错,您必须将其设置回原色。但我不知道OP的条件逻辑,这就是为什么我评论为
//您的条件逻辑
OP询问如何更改一行的颜色,您就是这样做的。我正在尝试您的答案,但有一个错误,问题上传了。@GMX因为您没有使用自定义适配器,您必须在声明适配器的地方编写内联。检查我的更新代码。