我有一个自定义适配器,用名称和数字填充ListView
。如果该数字具有特定的值,则该数字具有不同的颜色。
当它显示它工作正常,但当我滚动列表时,其他没有条件的数字也获得颜色。这是自定义适配器和getView()
方法。
private class MyCustomAdapter extends ArrayAdapter<CategoriaD> {
private ArrayList<CategoriaD> elementList;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<CategoriaD> elementList) {
super(context, textViewResourceId, elementList);
this.elementList = new ArrayList<CategoriaD>();
this.elementList.addAll(elementList);
}
private class ViewHolder {
TextView texto;
TextView cantidad;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.activity_inspeccion_categoria, null);
holder = new ViewHolder();
holder.texto = (TextView) convertView.findViewById(R.id.texto);
holder.cantidad = (TextView) convertView.findViewById(R.id.estadistica);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
CategoriaD Elemento = elementList.get(position);
holder.texto.setText(Elemento.getNombre());
holder.cantidad.setText(Elemento.getEstadistica());
if(Elemento.getEstadistica().equals(“50”)){
holder.cantidad.setTextColor(Color.RED);
}
holder.cantidad.setTag(Elemento);
return convertView;
}
}
答案 0 :(得分:1)
你的问题在这里:
if(Elemento.getEstadistica().equals(“50”)){
holder.cantidad.setTextColor(Color.RED);
}
您需要确保使用else语句将颜色设置回默认值,因为在进行更改时使用转换视图时它会持续存在,因为视图不会被重新填充。
if(Elemento.getEstadistica().equals(“50”)){
holder.cantidad.setTextColor(Color.RED);
} else {
//TODO change to your default color color
holder.cantidad.setTextColor(Color.BLACK);
}
编辑:此外,您的更改很小,所以这比膨胀2个单独的convertView更好,但是如果您对每个项目的convertView或更多项目进行了更大幅度的更改,那么您可以覆盖getItemViewType(int)方法,允许您为每种类型的项目充气不同的转换视图,并在请求正确的项目类型时自动重复使用它。你只需要输出和整数依赖于你用来改变文本颜色的if if case。 (可能分别为0和1。)
答案 1 :(得分:0)
对于自定义适配器,我发现覆盖所有基础是可行的方法。 if-block应该有一个补充else块,即使它似乎是多余的。
尝试使用以下getView()
方法代替您的方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.activity_inspeccion_categoria, null);
holder = new ViewHolder();
holder.texto = (TextView) convertView.findViewById(R.id.texto);
holder.cantidad = (TextView) convertView.findViewById(R.id.estadistica);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
CategoriaD Elemento = elementList.get(position);
holder.texto.setText(Elemento.getNombre());
holder.cantidad.setText(Elemento.getEstadistica());
if(Elemento.getEstadistica().equals(“50”)){
holder.cantidad.setTextColor(Color.RED);
} else {
holder.cantidad.setTextColor(Color.GREEN); // Change this to whatever Color
}
holder.cantidad.setTag(Elemento);
return convertView;
}