Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 11/01/16, 01:56:44
Array

[xs_avatar]
gonza28 gonza28 no está en línea
Desarrollador
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Tu operador: Personal
setTextColor desde el ArrayList (ayuda)

Hola. Por favor necesito saber esto ya que no pude lograr.

Tengo un recycler view. los datos vienen desde un modelo estatico.

Todos los items son numeros. Pero necesito definir desde el modelo algunos colores para los numeros ya que algunos de ellos son de distintos colores.

Por favor, hace 2 dias que vengo en la lucha sin exito. Muesto lo que hice y no me funciona.

Modelo:

[PHP]public class ModelEquivalent {

private String tapSize;
private int azul;

public ModelEquivalent(String tapSize , int azul) {
this.tapSize = tapSize;
this.azul = azul;


}

public static final List<ModelEquivalent> DecimalEquivalents = new ArrayList<>();

static {
DecimalEquivalents.add(new ModelEquivalent(".0135", R.color.azul_item));
}

public String getTapSize() {
return tapSize;
}
public int getAzul() {return azul;}

}[/PHP]

Adapter:

[PHP]public class Adaptador_Equivalent
extends RecyclerView.Adapter<Adaptador_Equivalent.ViewHold er> {


private final List<ModelEquivalent> items;

public static class ViewHolder extends RecyclerView.ViewHolder {
// Campos respectivos de un item
public TextView tapSize;
public TextView azul;

public ViewHolder(View v) {
super(v);

tapSize = (TextView) v.findViewById(R.id.textTapSize);
azul = (TextView) v.findViewById(R.id.textTapSize);


}

public Adaptador_Equivalent(List<ModelEquivalent> items) {
this.items = items;
}

@override
public int getItemCount() {
return items.size();
}

@override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_technical_equivalent, viewGroup, false);
return new ViewHolder(v);
}

@override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
ModelEquivalent item = items.get(i);

viewHolder.tapSize.setText(item.getTapSize());
viewHolder.azul.setTextColor(item.getAzul());




}


}[/PHP]


Hay mas contenidos, pero lo reduje para que sea mas chico el post y sea mas claro.
Ojalá alguien me de una mano.
Bueno, seguro estoy haciendo mal.
Necesito una mano amigos por favor. así como lo estoy haciendo no me funciona.

Un saludo
Responder Con Cita


  #2  
Viejo 11/01/16, 07:20:53
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El setTextColor aplica directamente un color en formato hexadecimal, no aplica el color contenido en un Resource.

Es decir, si tu color es el azul será algo parecido a esto: 0xFF0000FF. Supongamos que es ese, si no lo es será próximo.

Bien, eso lo almacenas en un Resource, al que accedes mediante R.color.azul_item, que es una referencia. Es como si fuese un puntero de C, el valor contenido en R.color.azul_item es el color azul, pero realmente su valor será un número entero, por poner un ejemplo, el 727 (cada vez que recompilas tu aplicación ese valor cambia).

Es decir, realmente estás aplicando:

viewHolder.azul.setTextColor(727);

En lugar de aplicar:

viewHolder.azul.setTextColor(0xFF0000FF);

¿Cómo se soluciona? Obteniendo el valor del color de forma correcta, es decir, el valor contenido en el recurso, que sería así:

ContextCompat.getColor(context, R.color.azul_item);

getResources() está deprecated en Android 6.0.

Eso puedes hacerlo en el modelo, cuando recuperas el color (sería el sitio más correcto), así que tu código sería:

DecimalEquivalents.add(new ModelEquivalent(".0135", ContextCompat.getColor(context, R.color.azul_item)));
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 11/01/16, 09:46:10
Array

[xs_avatar]
gonza28 gonza28 no está en línea
Desarrollador
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Tu operador: Personal
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
El setTextColor aplica directamente un color en formato hexadecimal, no aplica el color contenido en un Resource.

Es decir, si tu color es el azul será algo parecido a esto: 0xFF0000FF. Supongamos que es ese, si no lo es será próximo.

Bien, eso lo almacenas en un Resource, al que accedes mediante R.color.azul_item, que es una referencia. Es como si fuese un puntero de C, el valor contenido en R.color.azul_item es el color azul, pero realmente su valor será un número entero, por poner un ejemplo, el 727 (cada vez que recompilas tu aplicación ese valor cambia).

Es decir, realmente estás aplicando:

viewHolder.azul.setTextColor(727);

En lugar de aplicar:

viewHolder.azul.setTextColor(0xFF0000FF);

¿Cómo se soluciona? Obteniendo el valor del color de forma correcta, es decir, el valor contenido en el recurso, que sería así:

ContextCompat.getColor(context, R.color.azul_item);

getResources() está deprecated en Android 6.0.

Eso puedes hacerlo en el modelo, cuando recuperas el color (sería el sitio más correcto), así que tu código sería:

DecimalEquivalents.add(new ModelEquivalent(".0135", ContextCompat.getColor(context, R.color.azul_item)));
tocando un poco, llego a la nada misma y seguro que será por mi corto trato con los colores.

Responder Con Cita
  #4  
Viejo 11/01/16, 21:52:33
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Pues debería funcionarte haciéndolo así. ¿Si pones el color a piñón te funciona?

Es decir, si pones:

public int getAzul() { return 0xFFFF0000; }

Debería salirte rojo, si no sale rojo el fallo lo tienes en otra parte.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 12/01/16, 22:25:07
Array

[xs_avatar]
gonza28 gonza28 no está en línea
Desarrollador
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Tu operador: Personal
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Pues debería funcionarte haciéndolo así. ¿Si pones el color a piñón te funciona?

Es decir, si pones:

public int getAzul() { return 0xFFFF0000; }

Debería salirte rojo, si no sale rojo el fallo lo tienes en otra parte.
Hice un switch en el adapter. y funciona bastante bien. porque digo bastante?
pues no se porque me asigna color a algun item al cual no lo estoy incluyendo en el case.

mi lista maneja la mayoria de los items son azules. entonces en el layout le puse el color azul.
A las vriantes que rojo, verde y negro son menos numeros. como 10 nada mas. Asi que a estos pretengo modificar el color.

Por lo desesperado cree este case y funciona un 90% porque me cambia el color a algun numero al cual no lo incluyo en el case.

[PHP]switch (item.getTapSize()) {
case ".0156":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FFE74C3C"));
break;
case ".0197":
//verde
viewHolder.tapSize.setTextColor(Color.parseColor(" #FF16A085"));
break;
case ".0312":
//rojo
viewHolder.tapSize.setTextColor(Color.parseColor(" #FFE74C3C"));
break;
case ".0394":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FF16A085"));
break;
case ".0469":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FFE74C3C"));
break;
case ".0591":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FF16A085"));
break;
case ".0625":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FFE74C3C"));
break;
case ".0669":
viewHolder.tapSize.setTextColor(Color.parseColor(" #FF16A085"));
break;[/PHP]
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 06:06:33 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /