Hola a todos, es la primera vez que escribo en este foro y tengo una duda que no consigo resolver. Lo que estoy intentado, es cambiar el color de la lista de la compra conforme voy adquiriendo los productos de tal forma que mi idea era cambiar la variable booleana de "false"(letras rojas y tachadas) a "true"(verdes) y esta siendo una odisea ya que a través de un if - else me notifica los cambios( con un Toast) cada vez que hago click por medio del método "onItemClick", pero no cambian los colores de las letras.
Os dejo el código que llevo escrito:
Muchas gracias de antemano ;P
----------------------------------------------------------------------------------------------------------------------------------------------------
- MAINACTIVITY.JAVA
package com.example.actividad3;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ListActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
Adaptador adaptador;
List<Articulo> datos = new ArrayList<Articulo>();
private static final int MENU_OP1 = 1;
private static final int MENU_OP2 = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) findViewById(android.R.id.list);
final TextView tv1 = (TextView)findViewById(R.id.titulo);
adaptador = new Adaptador(this);
setListAdapter(adaptador);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long arg3) {
Articulo elegido =(Articulo) parent.getItemAtPosition(position);
List<Articulo> datos = new ArrayList<Articulo>();
CharSequence texto = "Seleccionado: " + elegido.getNombre();
boolean state1 = true;
boolean state2 = false;
if(elegido.isComprado() == state1){
elegido.setComprado(state2);
Toast.makeText(getBaseContext(), "Has desmarcado " + elegido.getNombre(), Toast.LENGTH_SHORT).show();
adaptador.notifyDataSetChanged();
Toast.makeText(getBaseContext(), "Actualización 1", Toast.LENGTH_SHORT).show();
}else{
elegido.setComprado(state1);
Toast.makeText(getBaseContext(), "Has marcado " + elegido.getNombre(), Toast.LENGTH_SHORT).show();
adaptador.notifyDataSetChanged();
Toast.makeText(getBaseContext(), "Actualización 1", Toast.LENGTH_SHORT).show();
}
adaptador.notifyDataSetChanged();
Toast.makeText(getBaseContext(), "Actualización 2", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------
- ADAPTADOR.JAVA
package com.example.actividad3;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class Adaptador extends ArrayAdapter<Articulo>{
Activity context;
public static List<Articulo> getArticulo(){
List<Articulo> datos = new ArrayList<Articulo>();
datos.add(new Articulo("Pan", false));
datos.add(new Articulo("Leche", true));
datos.add(new Articulo("Periódico", false));
datos.add(new Articulo("Fruta",true));
datos.add(new Articulo("Carne", true));
return datos;
}
public Adaptador(Activity context){
super(context,R.layout.fila,getArticulo());
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent){
View item = convertView; //Vista reutilizable
final VistaTag vistaTag;
if(item == null){
LayoutInflater inflater = context.getLayoutInflater();
item = inflater.inflate(R.layout.fila, null);
vistaTag = new VistaTag();
vistaTag.titulo = (TextView)item.findViewById(R.id.titulo);
item.setTag(vistaTag);//Guardamos el objeto en el elemento.
}else{
//Reutilizamos la Vista y recuperamos el objeto interno
vistaTag = (VistaTag)item.getTag();
item = convertView;
}
vistaTag.titulo.setText((CharSequence)getArticulo().get(position).getNombre());
if(getArticulo().get(position).isComprado()){
vistaTag.titulo.setPaintFlags(vistaTag.titulo.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
vistaTag.titulo.setTextColor(Color.parseColor("#00FF00")); //VERDE
notifyDataSetChanged();
}else{
vistaTag.titulo.setPaintFlags(vistaTag.titulo.getPaintFlags() &~Paint.STRIKE_THRU_TEXT_FLAG);
vistaTag.titulo.setTextColor(Color.parseColor("#FF0000")); //ROJO
notifyDataSetChanged();
}
notifyDataSetChanged();
return item;
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------
- ARTICULO.JAVA
package com.example.actividad3;
public class Articulo {
private String nombre;
private boolean comprado;
public Articulo(String nombre, boolean comprado){
this.nombre = nombre;
this.comprado = comprado;
}
public String getNombre(){
return nombre;
}
public boolean isComprado(){
return comprado;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public void setComprado(boolean comprado){
this.comprado = comprado;
}
public Object getItem(int position){
return position;
}
}
- VISTATAG.JAVA
package com.example.actividad3;
import android.widget.ListView;
import android.widget.TextView;
public class VistaTag {
public TextView titulo;
}
----------------------------------------------------------------------------------------------------------------------------------------------------
- ACTIVITY_MAIN.XML
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
xmlns:tools="
http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.actividad3.MainActivity"
android:background="#000000" >
<TextView
android:id="@+id/MainTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Lista de la compra"
android:textSize="30dp"
android:textColor="#FFFFFF" />
<TextView
android:id="@+id/MainDescripcion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/MainTitulo"
android:layout_below="@+id/MainTitulo"
android:layout_marginTop="20dp"
android:layout_marginBottom="15dp"
android:textColor="#FFFFFF"
android:text="Pulsa un rato un artículo del listado para modificarlo o eliminarlo. También puedes usar el menú para añadir un nuevo artículo." />
<ListView
android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/MainDescripcion"
android:layout_below="@+id/MainDescripcion"
android:focusable="false"
android:background="#000000" >
</ListView>
</RelativeLayout>
----------------------------------------------------------------------------------------------------------------------------------------------------
- FILA.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/titulo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="35dp"
android:text="titulo"
android:textSize="20dp" />
</LinearLayout>
----------------------------------------------------------------------------------------------------------------------------------------------------
Muchas gracias a todos por vuestro tiempo.