|
||
|
![]() |
![]() |
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
|
||||
|
||||
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 |
|
#2
|
||||
|
||||
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))); |
Gracias de parte de: | ||
#3
|
||||
|
||||
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))); ![]() ![]() |
#4
|
||||
|
||||
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. |
Gracias de parte de: | ||
#5
|
||||
|
||||
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] |
![]() |
![]() |
||||||
|
Herramientas | |