Détecter point de vue sur l'Adaptateur a été détruit
J'ai une ListView avec un BaseAdapter. Je veux mettre à jour certains éléments de la liste très souvent sans actualiser le contenu. Afin d'atteindre ce que je suis en utilisant le pattern observer. J'ai un objet observé et chaque élément de la liste est un observateur.
public View getView(final int position, View convertView, final ViewGroup parent) {
final ItemViewHolder holder;
final Item item = (Item) getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item, parent, false);
/* ADD VIEWS TO HOLDER */
holder = new ItemViewHolder();
convertView.setTag(holder);
ItemObserver observer = new ItemObserver(holder, context);
mapObservers.put(holder, observer);
observable.addObserver(observer);
} else {
holder = (ItemViewHolder) convertView.getTag();
}
//Set values into view etc...
return convertView;
}
Cela fonctionne bien, mais la question est: comment savoir si l'observateur n'est plus nécessaire?. Je veux détecter quand une vue est détruite afin d'obtenir l'observateur de la Carte et de la supprimer de l'objet observé. Est-il un auditeur qui est appelé lorsque la vue est détruite?
J'ai essayé AbsListView.RecyclerListener.onMovedToScrapHeap(View view)
, mais il semble être appelé lorsque la Vue est recyclé.
Merci!
OriginalL'auteur ivacf | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
Selon cette offical problème, Il y a un problème avec le
onViewDetachFromWindow
MAISDe sorte que vous ne pouvez pas attendre de la liste de points de vue à être détruit.
OriginalL'auteur Hugo Gresse
Votre point de vue doit s'étendre android Vue et remplacer méthode suivante:
MODIFIER
Après avoir lu les commentaires, j'ai décidé de m'expliquer un peu comment la vue de la liste de travaux.
Le plus gros problème est que les points de vue sont réutilisées par la carte. Lorsque vous faites défiler la liste vers le bas, le plus haut point de vue est réutilisé, ce n'est pas détruite!) pour montrer le plus bas point de vue. Ceci est reflété dans la méthode suivante si vous remplacez la getView() la méthode de la carte:
Ce qu'il fait derrière:
Donc, le convertView n'est jamais détruit, mais réutilisés. Pour en revenir au problème, il vous suffit titulaire doit mettre à jour les valeurs en fonction de la variable position, après la ligne:
Je veux dire point de vue devrait s'étendre android, pas ListView.
(downvoted) voir ma réponse stackoverflow.com/a/31719879/1377145
OriginalL'auteur Borzh