我想更改listview中所选项目的文字颜色。
主要
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub_alimentacao);
List<Tag> tags = getTagsSubAlimentacao();
final ListView listView = (ListView) findViewById(R.id.subAlimentacao);
listView.setAdapter(new TagSubAlimentacaoAdapter(this, tags));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {
TextView c = (TextView) view.findViewById(R.id.local);
LikeButton lk = (LikeButton) view.findViewById(R.id.gostei);
lk.setEnabled(false);
//OBTEM A COR EM INTEIRO E CONVERTE PARA HEXADECIMAL
Integer intColor = c.getCurrentTextColor();
String hexColor = "#" + Integer.toHexString(intColor).substring(2);
if (hexColor.equalsIgnoreCase("#2196F3")){
c.setTextColor(Color.parseColor("#aaaaaa"));
lk.setLiked(false);
}else{
c.setTextColor(Color.parseColor("#2196F3"));
lk.setEnabled(true);
lk.setLiked(true);
}
}
});
}
适配器
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Tag tag = tags.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layoute = inflater.inflate(R.layout.item_sub, null);
TextView titulo = (TextView) layoute.findViewById(R.id.local);
LikeButton lk = (LikeButton) layoute.findViewById(R.id.gostei);
titulo.setText(tag.getTitulo());
lk.setLiked(tag.getAtivo());
return layoute;
}
单击后它工作正常。颜色改变了。但我有一个问题,即
例如我在listview中有10个项目,最初只有5个项目可见(因为屏幕分辨率)如果我滚动我可以看到接下来的5个项目。
当我选择前5个元素时,颜色会发生变化。但是如果滚动接下来的5个元素
5个第一个元素的颜色恢复到原始状态。
答案 0 :(得分:0)
使用查看持有人模式...根据您的要求使用this answers进行更改。
答案 1 :(得分:0)
在ListView中滚动时,它总是设置适配器,所以在内部适配器中你必须设置文本颜色,如果你更喜欢ViewHolder模式,那就更好了
使用以下内部适配器获取输出
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Tag tag = tags.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layoute = inflater.inflate(R.layout.item_sub, null);
TextView titulo = (TextView) layoute.findViewById(R.id.local);
LikeButton lk = (LikeButton) layoute.findViewById(R.id.gostei);
titulo.setText(tag.getTitulo());
boolean likeValue=tag.getAtivo();
if(likeValue){
titulo.setTextColor(Color.parseColor("#2196F3"));
}else{
titulo.setTextColor(Color.parseColor("#aaaaaa"));
}
lk.setLiked(likeValue);
return layoute;
}