2013-01-15 7 views
10

Je rencontre des problèmes lorsque j'essaie de supprimer un élément de la vue de liste en un clic long. Voici le code:android - supprimer un élément de ListView sur un clic long

public class MListViewActivity extends ListActivity { 

private ListView lv; 
private String[] some_data = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    some_data = getResources().getStringArray(R.array.mdata); 

    // Bind resources Array to ListAdapter 
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.label, some_data); 
    this.setListAdapter(myAdapter); 

    lv = getListView(); 
    lv.setDividerHeight(3); 

    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
       int arg2, long arg3) { 

      // Can't manage to remove an item here 

      return false; 
     } 
    }); 
} 

Toute aide est appréciée

+0

Soyez plus précis. Erreurs, traces de pile, ce qui ne fonctionne pas, que ne pouvez-vous pas gérer? – jlindenbaum

+1

Vous devriez envisager d'utiliser ceci si vous avez une barre d'action dans votre application http://developer.android.com/guide/topics/ui/menus.html#context-menu en plus de la réponse de @TNR –

Répondre

14

Vous ne devriez pas utiliser Arrays, vous devez utiliser ArrayList pour supprimer et ajouter des éléments à un Listview. Une fois la taille du tableau déclarée, vous pouvez modifier les données dans un index particulier, mais vous ne pouvez pas supprimer les éléments ou les ajouter.

Alors Prenez une ArrayList et juste quand vous cliquez longuement sur l'élément ListView, appelez simplement la méthode remove de Arraylist et notifiez l'ensemble de données modifié.

Exemple:

ArrayList<String> al = new ArrayList<String>(); 

dans votre longclick écrire le code ci-dessous pour enlever l'article.

al.remove(arg2);//where arg2 is position of item you click 
myAdapter.notifyDataSetChanged(); 
9

essayer

lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, 
      int position, long arg3) { 

       myAdapter.remove(some_data[position]); 
       myAdapter.notifyDataSetChanged(); 

     return false; 
    } 

}); 
+0

lève une exception UnsupportedOperationException – Droidman

+0

était exactement ce que je cherchais. Si vous utilisez un ListView ou une sous-classe de celui-ci, utilisez la méthode ci-dessus pour obtenir l'élément en attente de la liste – Clocker

-1

J'ai eu des problèmes en utilisant cette méthode. et je l'ai résolu en utilisant cela.

  listStat.remove(listStat.get(arg2)); 
      lvStat.requestLayout(); 
      adapterStat.notifyDataSetChanged(); 

Je pense que cela aidera les autres.

+0

J'ai un problème similaire. Qu'est-ce que 'lvStat' ici dans votre code? – Chip

+0

@pc listview référence –

+0

J'ai 'VideoView',' ImageView' et 'TextView' dans ma ListView. Cela fonctionne pour 'ImageView' et' TextView' mais pas pour 'VideoView' – Chip

Questions connexes