2017-05-30 9 views
-3

Je fais une application Android, mais je suis bloqué sur la construction de la liste. Je souhaite supprimer chaque élément en utilisant le bouton Supprimer de chaque élément de la liste. Ce que je veux dire que si j'appuie sur un bouton de suppression dans une ligne spécifique, un élément de la liste sur la même ligne doit être supprimé.Erreur d'événement lorsque vous cliquez sur chaque bouton de suppression dans Android ListView

Cependant, j'ai quelques bugs ici. Lorsque j'appuie sur les boutons de suppression de la vue, seul le dernier élément de la vue est supprimé, pas l'élément sur la même ligne. Je ne sais pas pourquoi l'action d'événement de chaque bouton de suppression est connectée à l'ID du dernier élément uniquement.

Voici mon code adaptateur.

public View getView(int i, View convertView, ViewGroup parent){ 
    if(convertView == null){ 
     convertView = LayoutInflater.from(context).inflate(R.layout.item,null); 
     viewHolder = new ViewHolder(); 
     viewHolder.nickname_textView = (TextView)convertView.findViewById(R.id.nickname); 
     viewHolder.content_textView = (TextView)convertView.findViewById(R.id.post_content); 
     viewHolder.date_textView = (TextView)convertView.findViewById(R.id.date); 
     viewHolder.company_textView = (TextView)convertView.findViewById(R.id.company); 
     viewHolder.location_textView = (TextView)convertView.findViewById(R.id.location); 
     viewHolder.profile_imageView = (ImageView)convertView.findViewById(R.id.imageView); 
     viewHolder.deleteButton = (Button)convertView.findViewById(R.id.deleteButton); 
     viewHolder.idHolder_textView = (TextView)convertView.findViewById(R.id.idView); 

     convertView.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.nickname_textView.setText(list_itemArrayList.get(i).getNickname()); 
    viewHolder.content_textView.setText(list_itemArrayList.get(i).getContent()); 
    viewHolder.date_textView.setText(list_itemArrayList.get(i).getWrite_date().toString()); 
    viewHolder.location_textView.setText(list_itemArrayList.get(i).getLocation()); 
    viewHolder.company_textView.setText(list_itemArrayList.get(i).getCompany()); 
    viewHolder.profile_imageView.setImageResource(list_itemArrayList.get(i).getProfile_image()); 
    viewHolder.idHolder_textView.setText(""+list_itemArrayList.get(i).getId()); 
    viewHolder.idHolder_textView.setVisibility(View.INVISIBLE); 
    viewHolder.deleteButton.setId(list_itemArrayList.get(i).getId()); 

    viewHolder.deleteButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      String sID = viewHolder.idHolder_textView.getText().toString(); 
      long id = Long.parseLong(sID); 

      UserPosts deletePost = new UserPosts(context); 
      deletePost.open(); 
      deletePost.deleteItem(id); 
      deletePost.close(); 
     } 
    }); 

    return convertView; 
} 

Je ne sais pas pourquoi mon deleteButton.setOnClickListener ne fonctionne pas bien. Merci.

Voici ma capture d'écran d'application enter image description here

+0

logcat post s'il vous plaît –

+0

Et plz mettre à jour l'auto ..use urs recycleview au lieu de listview –

+0

Comment l'utilisation list_itemArrayList.remove (i) au lieu de l'intérieur de votre UserPosts cliquez sur l'écouteur? – Prexx

Répondre

0

viewHolder.idHolder_textView.getText() retourne la valeur des derniers éléments visibles du ListView. Essayez de remplacer ces lignes

String sID = viewHolder.idHolder_textView.getText().toString(); 
     long id = Long.parseLong(sID); 

Avec cette

long id = list_itemArrayList.get(i).getId(); 
+0

Je ne peux pas utiliser l'index 'i' dans la méthode setOnclickListener ㅠㅠ –

+0

créer une variable finale et l'initialiser avec i, alors utilisez cette variable finale au lieu de i comme ceci 'final int finalI = i;'. Ajoutez cette ligne avant que votre bouton ne clique. Utilisez finalI au lieu de j'aime ça long id = list_itemArrayList.get (finalI) .getId(); ' –

+0

Merci ça marche bien –