Animer les éléments de la liste dans la ListView

J'essaie d'animer de nouveaux éléments dans ma Liste. J'ai stable id-s, donc je sais exactement où l'élément à animer. Le problème vient de le recycler mécanisme de contrôle ListView. J'appelle startAnimation sur la Vue quand je sais que j'ai eu récemment avec l'élément inséré. Mais alors, le point de vue obtenu recyclé, rempli avec des données différentes.
Il en résulte sur l'INTERFACE utilisateur de l'animation de la mauvaise ligne. À un certain point, le point de vue a été tenue le droit des données, mais a ensuite obtenu recyclé. J'ai confirmé ce via logcat.
Est-il possible de résoudre ce problème?

EDIT:

public ExpensCursorAdapter(Context context, Cursor c, boolean autoRequery,
CopyOnWriteArraySet<String> fadeAnimateTags) {
super(context, c, autoRequery);
this.mFadeAnimTags = fadeAnimateTags;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
setup(view, context, cursor);
}
private void setup(View view, Context context, Cursor cursor) {
final String id = cursor.getString(4);
if (LOCAL_LOGV) Log.v(TAG, String.format("Create item for %s. Received view: %s", id, view.toString()));
view.setTag(id);
final TextView dateText = (TextView) view.findViewById(R.id.date);
final TextView timeText = (TextView) view.findViewById(R.id.time);
final TextView title = (TextView) view.findViewById(R.id.title);
final TextView amount = (TextView) view.findViewById(R.id.amount);
final Date date = new Date(cursor.getLong(0));
title.setText(cursor.getString(1));
dateText.setText(dFormat.format(date));
timeText.setText(tFormat.format(date));
amount.setText(String.format("%d Ft", cursor.getInt(2)));
if (cursor.getInt(3) == 1) {
timeText.setTextColor(Color.LTGRAY);
title.setTextColor(Color.LTGRAY);
dateText.setTextColor(Color.LTGRAY);
amount.setTextColor(Color.LTGRAY);
} else {
timeText.setTextColor(Color.BLACK);
title.setTextColor(Color.BLACK);
dateText.setTextColor(Color.BLACK);
amount.setTextColor(Color.BLACK);
}
if (mFadeAnimTags.contains(id)) {
view.setAnimation(AnimationUtils.loadAnimation(context, R.anim.fade));
mFadeAnimTags.remove(id);
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.expense_list_item, parent, false);
setup(view, context, cursor);
return view;
}
  • Où en êtes-vous de départ de l'animation? Je pense qu'il devrait être sur le getView() la méthode de l'Adaptateur.
  • Je dois commencer par là. Code ajouté à la question.
  • Avez-vous essayé de créer de nouveaux objets d'Animation à chaque fois que vous "setup" de la ligne? Peut-être parce que vous êtes à l'aide d'une méthode statique, il fait toujours référence à la même animation et il varie d'une ligne à l'autre.
  • J'ai créer une nouvelle animation à chaque fois. Je ne voudrais pas voir quoi que ce soit après la première, si elle a été la même. Il n'est pas. Le problème est que, en vue de les recycler, la vue j'ai mis de l'animation pour les retenues de données différentes.
  • avez-vous résolu le problème? J'ai le même code avec bindView et newView et le même problème provoqué par la vue de recyclage, avec un compte à rebours textView sur chaque ligne à la place de votre animation 🙁 Veuillez HELPPPPP!
  • J'ai fini la conversion de la toute ma mise en page avec LinearLayout. Et maintenant j'ai 100 éléments hauts, et ils sont d'accord dans LinearLayout.
  • accepter ce qui, en réponse, vous aide. ou postez votre réponse & accepter.
  • Malheureusement, je ne sais pas quelle a été la solution. 🙁
  • ma réponse était vraiment belle animation. Essayer et puis accepter

InformationsquelleAutor gmate | 2011-08-14