2010-08-17 6 views
1

J'ai créé un ListView qui contient une ligne qui à son tour contient du texte et un bouton. L'idée est que le bouton fonctionne comme un bouton de suppression pour supprimer la ligne de la liste ainsi que la base de données.Actualisation d'une liste en cliquant sur un bouton dans une rangée de cette liste.

Pour ce faire, j'ai créé un adaptateur pour gérer le clic du bouton. Ce code est ci-dessous. La suppression de l'enregistrement de base de données fonctionne correctement, mais je n'ai pas encore réussi à actualiser ListView pour que l'enregistrement ne soit plus affiché.

FeedArrayAdapter public class étend ArrayAdapter {

private ARssEReaderDBAdapter dba; 
private String TAG = "FeedArrayAdapter"; 
private View v; 
private ListView feedList; 

private OnClickListener btnDeleteFeedListener = new OnClickListener(){ 

    public void onClick(View pView) { 
     dba = new ARssEReaderDBAdapter(getContext()); 

     Integer objInt = (Integer) pView.getTag(); 
     dba.open(); 
     dba.deleteFeed(objInt); 
     dba.close(); 

     Log.w(TAG, "Database row, " + pView.getTag() + " got clicked."); 
    } 
}; 

public FeedArrayAdapter(Context context, int textViewResourceId, List<Feed> items) { 
    super(context, textViewResourceId, items); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    Log.w(TAG, "getView"); 
    v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.feedlistrow, null); 
    } 
    Feed feed = getItem(position); 
    if (feed != null){ 
     v.setTag(feed.getFeedId()); 
     TextView title = (TextView)v.findViewById(R.id.TextView01); 
     if (title != null){ 
      title.setText(feed.getTitle()); 
     } 
     Button btnDelete = (Button)v.findViewById(R.id.btnDelete); 
     btnDelete.setTag(feed.getFeedId()); 
     btnDelete.setOnClickListener(btnDeleteFeedListener); // 
    } 
    return v; 
} 

}

Toute aide est grandement appréciée.

Richard

Répondre

0

Peut-être que vous cherchez notifyDataSetChanged(). Assurez-vous de l'appeler depuis le fil de l'interface utilisateur.

public void notifyDataSetChanged() 

Since: API Level 1 
Notifies the attached View that the underlying data has been changed and it should refresh itself. 
+0

L'adaptateur de groupe a une méthode setNotifyOnChange qui est définie par défaut sur true. L'appel de notifyDataSetChanged ne doit avoir d'effet que s'il a été défini manuellement sur false. Inutile de dire que je n'ai pas eu ce travail. Je semble être incapable de l'appeler à partir du gestionnaire de clic. L'appeler d'autres endroits n'a eu aucun effet. – Richard

+0

C'est vrai, 'setNotifyOnChange()' supprime le besoin d'appeler directement cette méthode. Je n'ai pas vu cela dans l'extrait de code que vous avez posté. – Justin

+0

Je l'ai appelé sur l'adaptateur juste après l'initialisation dans l'activité de la liste, mais la valeur par défaut est true, donc je l'ai supprimé car il ne semblait pas avoir d'effet. – Richard

Questions connexes