Voici un problème que j'ai rencontré récemment: J'ai un listview avec une classe d'adaptateur personnalisée, l'adaptateur prend une liste de visualisation et remplit la listview avec des éléments de celui-ci . Maintenant, j'aimerais avoir un bouton sur chaque ligne d'une liste pour en retirer l'élément. Comment devrais-je aborder ce problème? Est-il possible de déclencher à distance une méthode dans la classe d'activité et d'appeler la méthode notifydatachanged() sur l'adaptateur pour actualiser la liste?ListAdapter pour modifier la source de données (qui est un arraylist)
Répondre
Je l'ai fait quelque chose comme ça:
public class MyAdapter extends Adapter {
private final ArrayList<String> items = new ArrayList<String>();
// ...
deleteRow(int position) {
items.remove(position);
notifyDataSetChanged();
}
//
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
Tag tag = new Tag();
// inflate as usual, store references to widgets in the tag
tag.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
deleteRow(position);
}
});
}
// don't forget to set the actual position for each row
Tag tag = (Tag)convertView.getTag();
// ...
tag.position = position;
// ...
}
class Tag {
int position;
TextView text1;
// ...
Button button;
}
}
Dans la méthode getView(), ne pouvez-vous pas simplement définirOnClickListener() sur le bouton?
Quelque chose comme ceci:
static final class MyAdapter extends BaseAdapter {
/** override other methods here */
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// inflate the view for row from xml file
// keep a reference to each widget on the row.
// here I only care about the button
holder = new ViewHolder();
holder.mButton = (Button)convertView.findViewById(R.id.button);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
// redefine the action for the button corresponding to the row
holder.mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do something depending on position
performSomeAction(position);
// mark data as changed
MyAdapter.this.notifyDatasetChanged();
}
}
}
static final class ViewHolder {
// references to widgets
Button mButton;
}
}
Si vous n'êtes pas sûr sur l'extension BaseAdapter, consultez exemple List14 dans ApiDemos. Cette technique vous fournit une manière flexible de modifier à peu près n'importe quel aspect de votre adaptateur, même si c'est un peu de travail.
Salut, merci pour votre aide, c'est à peu près ce que je fais ici. J'ai une classe d'activité qui a un tableau et une liste, j'ai une classe d'adaptateur dans laquelle je passe la liste et le tableau. Maintenant, une ligne dans un listview contient un bouton (chaque ligne), quand ce bouton est cliqué, je dois d'une manière ou d'une autre déclencher une méthode à l'intérieur d'une classe d'adaptateur mais une classe contenant l'activité. Comprenez vous? merci peter – dusker
- 1. Modifier la source de données d'un Microsoft.Reporting.Winforms.ServerReport
- 2. JSonarray vers Arraylist et Arraylist dans ListAdapter ne fonctionne pas. (Dans Android)
- 3. Comment modifier la valeur ArrayList
- 4. Quelle est l'inverse de (ArrayList) .toString pour une Java ArrayList?
- 5. Android: lier des données à un ListView sans préparer ArrayLists pour le ListAdapter?
- 6. Ajout au ListAdapter fait exception
- 7. Modifier l'image source pour l'affichage de l'image lorsqu'elle est pressée
- 8. Modifier un programme "open source"?
- 9. Modifier la base de données source de la base de données créée VS à l'exécution
- 10. Android ListAdapter Repaint
- 11. ListView/ListAdapter retrouver l'objet de la liste
- 12. Comment notifier ListAdapter
- 13. Utilisation d'un ListAdapter pour afficher les données de base de données
- 14. Performance Diff à l'aide de DataTable vs ArrayList comme source de données sur ASP .NET
- 15. est-il un exemple List/super simple de ListAdapter là-bas pour android
- 16. Source de données pour Oracle
- 17. ListView/ListAdapter pagination
- 18. Méthode la plus efficace pour modifier un flux de données
- 19. Quelle est la meilleure façon de modifier/compiler le code source des projets open source?
- 20. Une instance de source de données n'a pas été fournie pour la source de données
- 21. Est-il possible de modifier le code source avec ant?
- 22. Growing un Iframe en fonction de la source à l'intérieur (ce qui est un autre serveur)
- 23. ArrayList vide est nul
- 24. Comment fonctionne ListAdapter générique?
- 25. Saving ArrayList dans la base de données SQLite dans Android
- 26. comment modifier la source avec NAnt?
- 27. Android listadapter Anchor
- 28. ListAdapter dans les préférences?
- 29. Puis-je modifier la source de données du modèle de rapport lors de l'exécution?
- 30. Modifier la source Flash par Python
Assez cool, comment passez-vous l'ensemble de données modifié à l'activité? – dusker
Pourquoi devriez-vous? 'notifyDataSetChanged();' déclenche la mise à jour ListView. – yanchenko
oui c'est vrai, mais est-il possible de le passer à la classe d'activité? ou au moins le sérialiser pour qu'il soit accessible aux autres classes? – dusker