Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 11/01/16, 01:56:44
Avatar de gonza28
gonza28 gonza28 no está en línea
Desarrollador
Mensajes: 4,191
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Versión de ROM: Android Lollipop 5.1.1
Tu operador: Personal
Mencionado: 6 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de gonza28
gonza28 gonza28 no está en línea
Desarrollador
Mensajes: 4,191
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Versión de ROM: Android Lollipop 5.1.1
Tu operador: Personal
Mencionado: 6 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de gonza28
gonza28 gonza28 no está en línea
Desarrollador
Mensajes: 4,191
 
Fecha de registro: feb 2012
Localización: INTERESA?
Mensajes: 4,191
Modelo de smartphone: Samsung Galaxy Note 4
Versión de ROM: Android Lollipop 5.1.1
Tu operador: Personal
Mencionado: 6 comentarios
Tagged: 0 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 12:02:20 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007