Salut tout le monde Je ne suis pas un codeur professionnel, mais j'ai joué avec une simple liste de choses à faire pour apprendre les bases du développement android.Problème de couleur ListView
J'ai été capable d'obtenir à peu près tout ce que je veux travailler, mais il y a un problème avec ma listview qui m'a complètement dérouté. J'ai étendu SimpleCursorAdapter afin de formater les données provenant de ma base de données sqlite et de changer la couleur du texte deededate selon si le duedate a expiré ou non. Le formatage fonctionne parfaitement, mais je reçois des résultats bizarres avec les couleurs. Les premières entrées de la liste ressemblent à ce que je les attend, mais lorsque je défile vers le bas, des incohérences commencent à apparaître lorsque les éléments sans date d'échéance sont colorés en rouge ou en vert. Plus je défile vers le haut et vers le bas dans la liste, plus les incohérences apparaissent jusqu'à ce que finalement chaque ligne soit colorée, qu'elle le soit ou non. Est-ce que quelqu'un peut m'aider à comprendre ce qui se passe ici? S'il vous plaît voir mon adaptateur personnalisé ci-dessous.
public class ProAdapter2 extends SimpleCursorAdapter {
private static int[] TO = {R.id.priority, R.id.projectname, R.id.duedate};
private static String[] FROM = {"priorities", "projectName", "dueDate"};
private Context context;
private int layout;
//constructor
public ProAdapter2(Context context, int layout, Cursor c) {
super(context,layout, c, FROM, TO);
this.context=context;
this.layout = layout;
}
@Override
public View newView(Context context, Cursor curso, ViewGroup parent){
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
TextView txtName = (TextView) v.findViewById(R.id.projectname);
txtName.setText(c.getString(1));
TextView txtPriority = (TextView) v.findViewById(R.id.priority);
txtPriority.setText(c.getString(2));
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
TextView txtDueDate = (TextView) v.findViewById(R.id.duedate);
TextView txtDueDateLabel = (TextView) v.findViewById(R.id.duedate_label);
TextView txtPriority = (TextView) v.findViewById(R.id.priority);
TextView txtPriorityLabel = (TextView) v.findViewById(R.id.priority_label);
TextView txtName = (TextView) v.findViewById(R.id.projectname);
LinearLayout pridate = (LinearLayout) v.findViewById(R.id.pridate);
String dueDate = c.getString(3);
String cDate = c.getString(4);
String dueDateFormated;
MyTime t = new MyTime();
Long cTimeLong = c.getLong(6);
Long dTimeLong = c.getLong(5);
dueDateFormated = t.getFormatedTime(c.getString(3));
txtDueDate.setText(dueDateFormated);
if (c.getInt(5)==0){
txtDueDate.setText("Not Set");
}
else if (cTimeLong < dTimeLong){
txtDueDate.setTextColor(Color.GREEN);
}
else if (cTimeLong > dTimeLong){
txtDueDate.setTextColor(Color.RED);
}
}
}
http://i.stack.imgur.com/bt4Z8.png
n'a pas compris ce que font u si les conditions d'autre ??? pouvez-vous expliquer .. – viv
Ma base de données stocke la date d'échéance dans le format d'époque Unix, le nombre de secondes depuis le 1er janvier 1970. SQL rend également facile d'obtenir l'heure actuelle dans Unix temps, il est donc facile de comparer 2 dates et comprendre qui est le plus âgé. – user548369