Comment appeler notifyDataSetChanged() à partir d'un générique Adaptateur
Un OnItemClickListener
pour un ListView
a la méthode suivante:
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
J'aimerais avoir la carte derrière le ListView
d'actualisation, et je crois que c'est fait grâce à l'utilisation de:
BaseAdapter.notifyDataSetChanged()
Comment puis-je utiliser le parent
paramètre dans la onItemClick
méthode pour faire cela? Jusqu'à présent, j'ai essayé:
parent.getAdapter().notifyDataSetChanged();
Cela déclenche une erreur parce que l'objet retourné est de classe HeaderViewListAdapter
, qui, pour des raisons inconnues n'est pas une sous-classe de BaseAdapter
.
OriginalL'auteur Matty F | 2010-05-19
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'y a pas de méthode dans HeaderListView pour l'actualisation des données/recharger. La seule façon que je peux penser de le faire est de réaffecter la carte.
Si ses une instance de SimpleCursorAdapter puis enfermé à la base de l'adaptateur et de l'appel notifyDataSetInvalidated().
Le problème est que le onItemClick événement passe dans un AdapterView (parent), et en effectuant des getAdapter() renvoie un HeaderViewListAdapter. Lorsque j'utilise getWrappedAdapter() retourne un ListAdapter et malheureusement BaseAdapter est une sous-classe de cela, donc je ne peux pas encore utiliser les informer des méthodes, même si dans ce cas, le sous-jacent de l'adaptateur de la ListView est un SimpleCursorAdapter. Comment puis-je obtenir un renvoi à la liste de la mise en œuvre de l'adaptateur?
Vous avez raison, j'avais besoin de transtypage de la ListAdapter: HeaderViewListAdapter adapterwrap = (HeaderViewListAdapter) parent.getAdapter(); BaseAdapter carte = (BaseAdapter) adapterwrap.getWrappedAdapter();
OriginalL'auteur Karan
Vous pouvez également accéder à la BaseAdapter par l'intermédiaire de votre adaptateur personnalisé comme le montre le fragment de code suivant:
OriginalL'auteur Noah
OriginalL'auteur ruslanys
Vous n'avez pas besoin d'appeler n'importe quelle méthode pour actualiser votre carte client lorsque vous travaillez avec le curseur.
Au lieu de cela, après toute opération que vous avez de "Notifier les changements" à l'aide de
getContentResolver().notifyChange(uri, null);
Par exemple:
Votre
viewclient (Listview, Gridview, Whatever)
changera automatiquement même si vous utilisez un adaptateur personnalisé ou non.Espérons que cette aide.
OriginalL'auteur Adriano Ferreira
Je l'ai trouvé beaucoup plus facile ..appelez simplement
this.onCreate(null)
qui rechargement complet de créer de la méthode, mais l'activité reste la même .OriginalL'auteur sanju_gem