2011-12-23 4 views
0

J'ai une liste avec chaque ligne contenant du texte et un bouton de suppression. Lorsque le bouton Supprimer est enfoncé, la ligne doit être supprimée. J'utilise un adaptateur de base et il y a une liste globale dont l'élément sera affiché.problème Android lors de la suppression d'élément de listview

S'il vous plaît voir mon code adpater ci-dessous

public class JobCartListAdapter extends BaseAdapter { 

    protected LayoutInflater mInflater; 
    public JobCartListAdapter(Context mContext) { 
     super(); 

     this.mContext = mContext; 
     mInflater = LayoutInflater.from(mContext); 
    } 

    Context mContext; 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return JobsManager.JobsCartList.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
ViewHolder holder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.job_cart_row, null); 
      holder = new ViewHolder(); 
      holder.text1 = (TextView) convertView.findViewById(R.id.title); 
      holder.delete = (ImageButton)convertView.findViewById(R.id.delete); 
      holder.delete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.i("Remove from" , "" + position); 
        JobsManager.JobsCartList.remove(position) ; 
        notifyDataSetChanged(); 
       } 
      }); 
      convertView.setTag(holder); 
     } else { 

      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.text1.setText(JobsManager.JobsCartList.get(position).getTitle()); 
     return convertView; 
    } 

    static class ViewHolder { 
     TextView text1; 
     ImageButton delete; 
    } 
} 

la question que je suis confronté est:

  1. quand je presse delet pour la firstime, la position dans la liste est correcte et l'élément est supprimé et la liste est actualisée

  2. Lorsque je clique de nouveau sur une ligne dans la liste actualisée, la position correspondante transmise à getview n'est pas correcte. Donc, cela conduit à un index hors de l'exception liée que cette position est utilisée comme index pour la liste. J'ai vérifié ma liste et il est correctement mis à jour sur ajouter et supprimer. C'est le problème avec l'adaptateur de liste. Après l'actualisation de la liste avec appel de notifystatechanged, quand une ligne est cliquée, la position de la ligne retournée n'est pas correcte.

s'il vous plaît aider

Répondre

1

Vous ne devez pas enlever la vue simplement supprimer l'objet se rapporte par adapter.remove(adapter.getItem(position)); il supprime l'objet spécifié de la liste & appel de la méthode la notifyDatasetChanged()

+0

can u pls expliquer ce que signifie réellement cet "adaptateur". – png

+0

Désolé préetha mon erreur en fait votre converview étant réutilisé et le onclicklistener de suppression est en train de maintenir l'ancienne position donc faites une chose définir la position comme tag pour supprimer le bouton comme 'delete.setTag (position +" ") ; '& dans l'écouteur de clic obtenir cette étiquette de bouton et supprimer également dans getview si converview n'est pas nul, puis extraire le bouton de suppression de converView et mettre à nouveau la balise –

+0

oui, le problème était dû à la réutilisation de converview. J'ai changé cela pour ne pas réutiliser car cela semblait plus facile. Merci beaucoup. – png

Questions connexes